標籤:

如何用 C 語言解決兩個大數相乘問題?

希望得到一個程序,怎麼實現兩百位到三百位的兩個大數相乘。謝謝


1、若是作業,請獨立完成
2、善待知乎,她不是百度知道,問問題前建議先Google
3、用字元串數組模擬做算術的過程,則加減乘大數模擬均可,唯一要注意的地方是逆序,即0位對應數字最低位


居然沒有人提到FFT的解法,推薦hdu上的一道題目hdu 1402,如何在nlogn的時間複雜度內解決大整數相乘除問題


我覺得題主小學時候會做的,現在只是忘了而已,請努力回想一下(無嘲諷意)


1,乘法就是加法的重複。
2,用字元串來實現兩個大數字的加法。


人腦會怎麼處理?yes! 人腦只是按照規則,做最簡單的九九乘法表。1,把它看作字元串,然後分解,運算,組合。希望你明白了。


用筆怎麼算,用程序就怎麼算。


1 乘數以32bit為單位,取權值,
2 定義一個計數器
3 判斷循環左移,超出4位元組長度,計數器加1,求反,繼續判權值循環左移
4 定義字元串指針,依照權值位置賦值。
結束。


我記得彙編裡邊的乘法就是利用兩個寄存器不斷的求和。當時還琢磨了好一陣。


兄弟,當你親自動手寫出這段代碼的話,你會發現當個編程其實不難,挺好玩的


這樣的問題分成兩個部分:演算法設計和程序實現。

如果題主是不懂演算法的選擇和設計,我建議看一看一門數學課程《計算機代數》,這門課程就是用來解決這類問題的,題主的問題只是其中的一類問題:大數計算。(當然這個課程不完全是計算機演算法的實現,還大量討論了這樣的演算法設計的原理,複雜度分析。)

如果演算法搞的清楚,自然用什麼語言寫就無所謂了。


用數組存放,或者字元串。


首先,鄙視下「善待知乎」論者。別以為標題取個「怎麼評價」之類的就高大上,問個學術問題就百度知道低水平。知乎不是你的後花園,也別意淫自己是園丁。有能力你就給出個比百度知道更高級的答案,沒能力就自覺過濾。別在這秀下限。

回到主題,如果我沒理解錯,樓主說的大數不是8位的千萬級別,而是有幾百位數的數字。這種大數計算機壓根無法表示成整型變數。百度知道上那個分治演算法行不通。最牛逼的演算法是FFT。

我高數太渣,傅立葉變換已然超出我的文化界限。所以直接粘貼了。
HDU1402 快速傅立葉變換(大數乘法)


推薦閱讀:

如何學慣用 C 語言寫 惠普 / Palm webOS 程序?
頭文件、庫文件、命名空間三者之間是什麼關係?
如何評價 Ken Thompson 在 C 編譯器里植入了後門這件事?
有沒有什麼好的C++視頻教程?
《The C++ Programming Language》這本書真的適合初學者嗎?

TAG:C編程語言 |