簡體   English   中英

將字符串轉換為大整數?

[英]Convert string to a large integer?

我有一個任務(我認為這很常見),目的是開發一個LargeInteger類,該類可以使用..非常大的整數進行計算。

我顯然根本不允許使用Java.math.bigeinteger類。

就在頂部,我被卡住了。 我需要從用戶那里獲取2個字符串(長數字),然后我將使用這些字符串來執行各種計算方法(加,除,乘等)。

誰能向我解釋這應該如何工作的理論呢? 在我從用戶那里獲取了字符串之后(由於它太大而無法存儲在int中),我是否應該將其分解成10位數字的長整數塊(我認為10就是最大長整數,也許是9位?)

任何幫助表示贊賞。

首先,考慮一下存儲數字的便捷數據結構。 考慮一下如何將N位數字存儲到int[]數組中。

現在以加法為例。 您將如何添加兩個N位數?

使用我們的小學加法,首先我們看兩個數字最低有效位 (按標准符號,這將是最右邊的位)。 然后將它們加起來。

因此,如果最右邊的數字是78 ,我們將獲得15 取此結果的最右邊數字( 5 ),這是答案的最低有效數字。 1將結轉到下一個計算。 因此,現在我們看第二個最低有效數字,並將它們與進位加在一起(如果沒有進位,則為0 )。 並重復直到沒有剩余數字可添加為止。

基本思想是將數字存儲在某些數據結構中時,將如何手動將加,乘等轉換為代碼。

我將為您提供一些指導,說明我可能會執行類似的任務,但請讓您了解詳細信息。

  1. 看一下如何通過簡單的電子加法器電路完成加法。 具體來說,他們使用小的加法塊組合在一起。 這些校長會有所幫助。 具體來說,您可以添加塊,只需記住從一個塊繼續到下一個塊即可。
  2. 您將其分解為較小的博客的想法是一個很好的想法。 只要記住要正確的轉換即可。 我懷疑9位數是正確的,用於結轉等目的。

這些任務將幫助您進行加法和減法。 乘法和除法有點棘手,但還是有一些技巧。

  1. 乘法是較容易的任務,只需記住將一個數的每個塊與另一個數相乘,然后攜帶零。
  2. 整數除法基本上可以像長除法一樣進行,一次只能使用整個塊。

我從未真正構建過這樣的類,因此希望這里可以使用一些東西。

查看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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM