[英]Convert string to a large integer?
我有一個任務(我認為這很常見),目的是開發一個LargeInteger類,該類可以使用..非常大的整數進行計算。
我顯然根本不允許使用Java.math.bigeinteger
類。
就在頂部,我被卡住了。 我需要從用戶那里獲取2個字符串(長數字),然后我將使用這些字符串來執行各種計算方法(加,除,乘等)。
誰能向我解釋這應該如何工作的理論呢? 在我從用戶那里獲取了字符串之后(由於它太大而無法存儲在int中),我是否應該將其分解成10位數字的長整數塊(我認為10就是最大長整數,也許是9位?)
任何幫助表示贊賞。
首先,考慮一下存儲數字的便捷數據結構。 考慮一下如何將N
位數字存儲到int[]
數組中。
現在以加法為例。 您將如何添加兩個N
位數?
使用我們的小學加法,首先我們看兩個數字的最低有效位 (按標准符號,這將是最右邊的位)。 然后將它們加起來。
因此,如果最右邊的數字是7
和8
,我們將獲得15
。 取此結果的最右邊數字( 5
),這是答案的最低有效數字。 1
將結轉到下一個計算。 因此,現在我們看第二個最低有效數字,並將它們與進位加在一起(如果沒有進位,則為0
)。 並重復直到沒有剩余數字可添加為止。
基本思想是將數字存儲在某些數據結構中時,將如何手動將加,乘等轉換為代碼。
我將為您提供一些指導,說明我可能會執行類似的任務,但請讓您了解詳細信息。
這些任務將幫助您進行加法和減法。 乘法和除法有點棘手,但還是有一些技巧。
我從未真正構建過這樣的類,因此希望這里可以使用一些東西。
查看Michael Bromberger的MPI 1.8.6的源代碼(C庫)。 它為bignum和簡單的算法使用簡單的數據結構。 它是C,不是Java,而是簡單易懂的代碼。
它的除法性能很差(並且導致非常大的bignums到tex的緩慢轉換),但是您可以遵循代碼。
有一個函數mpi_read_radix
可以讀取帶有可選的前導+/-號的任意基數(最高為36,其中Z為35)的數字,並產生一個bignum。
我最近為編程語言解釋器選擇了該代碼,因為盡管它不是執行速度最快,也不是最完整的代碼,但是它很容易被黑客入侵。 我已經能夠自己將平方根重寫為一個更快的版本,將影響端口的一些編碼錯誤修復為64位數字,並添加了我需要的一些缺少的操作。 另外,許可與BSD兼容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.