藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月6日 10:18


c語言2個32位大數相乘,乘積是64位,該咋做

我的機器最長的整數類型是32位long類型。我想對兩個32位的長整型進行
相乘的運算,按說乘積應是64位,咋得到這個64位乘積呢?如何表示
這個64位乘積數呢?

c語言2個32位大數相乘,乘積是64位,該咋做

你用double看怎麼樣?

c語言2個32位大數相乘,乘積是64位,該咋做

經典的做法是把32位的整數拆成兩個16位的整數,然後做乘法。這樣做比較慢。

在 gcc 中,有數據類型 longlong, 64位的,當然是個結構了。在 VC中也有相應的類型。

如果要求效率,嵌入彙編。

c語言2個32位大數相乘,乘積是64位,該咋做

可以用兩個數組來存放乘數與被乘數,乘積存放到另一個數組裡。
char a[10];
char b[10];
char c[20];

a*b ->; c. (關鍵是處理進位)

不過做法可能較慢。

c語言2個32位大數相乘,乘積是64位,該咋做

我覺得用字符串來做乘法比較好,這樣就不要考慮機器的字長了。
儘管慢一點

c語言2個32位大數相乘,乘積是64位,該咋做

我覺得也是用字符串比較好。

c語言2個32位大數相乘,乘積是64位,該咋做

用double就可以了,哪有那麼複雜呢。

c語言2個32位大數相乘,乘積是64位,該咋做

大數相乘問題,當然是用字符串數組。請見清華版C++程序問題集。
不過樓主的問題還不夠大數的標準,double也行吧。

c語言2個32位大數相乘,乘積是64位,該咋做

VC有int64這個數據類型。

c語言2個32位大數相乘,乘積是64位,該咋做

-->

樓主問的問題已經夠大整數標準了。

用字符串來實現該乘法? 我手頭沒有你說的那本書,不過在實際的工程中,我從未見過有人那麼做的。如果真有人這麼做了,他的代碼也只能是玩具。因為其[color=red]數據結構浪費空間,運算效率差[/color]。很難設計出效率更低的算法了。

用double 是不行的。樓主說得好,兩個32位的整數,乘起來得到一個64位的整數。在我用的 gcc上,double 占64位,其中包含了指數部分的信息,所以其有效數字位數是達不到64位的。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com