|
藍森林 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位的。 |
| |