我需要一個算法來對大數字進行算術運算(比float,double int或任何其他數據類型的範圍要高)。我需要用C編寫代碼。我試着在這裏查找:Knuth,Donald,計算機編程藝術,ISBN 0-201-89684-2,第2卷:研討會算法,第4.3.1節:古典算法但無法忍受它。我只需要算法而不是代碼。在很大的數字上進行算術運算的算法
回答
另外,據我所知,你不會比簡單的線性O(n)算法好得多,也就是說,只需要逐位添加數字。你可能必須讀完整個輸入,所以它至少是線性的。你也許可以做各種各樣的技巧來保持不變。
由於基本長乘法算法的二次性,您的主要問題是乘法。您可能需要考慮here提供的幾種更快的方法之一。 Karatsuba方法實現起來有點棘手,但它可能是最簡單的非平凡算法,它會給你帶來好處。否則,您將不得不更多地瞭解快速傅立葉變換方法,例如Schönhage-Strassen's algorithm或Fürer's algorithm。請參閱Big O notation。
我在C中實現了一個簡單的基於FFT的乘法(〜Fürer方法),作爲一年級大學生,用於一個學校項目。數字食譜中有一些有趣的材料,並不是很難。 –
僅供參考,請閱讀Knuth vol 2或Crandall和Pomerance。對於編碼,我建議在開始使用Karatsuba或傅里葉變換之前先獲得明顯的算法。
該書因素分解的素數和計算機方法由Riesel提供了易於閱讀的多精度算術代碼的附錄。
沒有算法對大數執行算術運算。算術運算保持不變。你需要的是類http://www.codeproject.com/KB/cs/BigInt.aspx
我認爲Karatsuba算法是最好的大數執行算術運算。對於足夠大的n,另一種泛化,Schönhage-Strassen算法,甚至更快。 你可以查找算法 Karatsuba 或 Karatsuba_Multiplication
- 1. Typescript:對算術運算進行編碼
- 2. 對list :: iterator進行算術運算?
- 3. 算術運算
- 4. 算術運算
- 5. 算術運算
- 6. 算術運算
- 7. 算術運算
- 8. PHP算術運算(加法)
- 9. 執行算術運算Pig
- 10. 算術運算結果的大小Verilog
- 11. 代碼不允許在javascript計算器上進行適當的算術運算
- 12. 組裝,對棧上的局部變量進行算術運算
- 13. 使用類型字符串的DB字段上的JPA進行算術運算
- 14. 我可以在Number基類上進行算術運算嗎?
- 15. 在matlab中用不等大小的數組進行算術運算
- 16. 32位或64位CPU如何對大數字進行算術運算?
- 17. 計數算術運算
- 18. 大數算術
- 19. 用Javascript中的函數進行算術運算
- 20. 是否有一個很好的Javascript算術加法運算符?
- 21. CSH算術運算
- 22. jpa列上的算術運算查詢
- 23. Erlang上的Erlang算術運算:select result
- 24. Golang:結構上的算術運算符
- 25. XSLT中的算術運算
- 26. 算術運算的JavaScript
- 27. C#中的算術運算
- 28. Haskell中的字符算術運算
- 29. 在字符C上執行算術運算
- 30. 算術算法
功課,你可以使用鏈表一大批。列表中的單個節點將保存號碼的單個數字。 –
您可以對GMP(http://gmplib.org/)或Java的BigInteger類等現有庫進行逆向工程。源代碼位於http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Core/math/java/math/BigInteger.java.htm。 –
你會如何對非常大的數字進行算術運算?有你的算法,至少有一個起點... –