2012-12-14 33 views
0

說我有16個64位無符號整數。在執行操作時,我一直非常小心地在它們之間提供攜帶物。我可以將它們送入一種方法,將它們全部轉換爲一串十進制數字,就像它是一個1024位二進制數字一樣?換句話說,是否可以創建一個方法來處理代表一個大整數的任意數量的整數?打印多個整數作爲一個任意長的十進制字符串

我認爲對於有符號整數會更困難,因爲最重要的一點是需要處理。我想這應該是最重要的整數是有符號的整數,其餘的將是無符號的,以表示數字的剩餘部分。

(這是半有關another question

回答

1

這有點不清楚。

當然,如

void print_1024bit(uint64_t digits[]); 

可以寫成這樣做的功能。但是如果你的意思是任何標準庫的printf()-功能族可以做到這一點,那麼我認爲答案是否定的。

你可能在其他問題所看到的,轉換成二進制數成不同的基礎b的核心是由兩個操作:

  • b,找出當前最顯著位數
  • 除以b,一旦它被生成以消除數字

當應用直到數字爲0時,這將以相反的順序生成所有數字。

所以,你需要爲你的1024位數字實現「模10」和「除10」。

例如,考慮小數4711,這是我們要轉換爲八進制數只是這個例子:

  1. 4711%8是7,所以最右邊的數字是
  2. 八分之四千七百十一是588
  3. 588%8是圖4中,下一個數字是
  4. 八分之五百八十八是73
  5. 73%圖8是
  6. 8分之73是9
  7. 9%8是
  8. 8/8爲1
  9. 1%8是
  10. 8分之1是0,我們」重做。

所以,從底部讀出的大膽位和多達向最右邊的數字,我們得出結論,4711 = 11147 。你可以使用計算器來驗證這一點,或者只是相信我。 :)

0

當然,這是可能的,但不是非常直接。

沒有重新發明輪子,如何重用圖書館?

GNU Multi Precision Arithmetic Library就是這樣一種可能性。我自己並不需要這些東西,但它似乎適合您的賬單。

+0

聽這傢伙,並使用圖書館。 – 2012-12-14 12:27:45

4

您可以使用double dabble algorithm,它規避了多精度乘法和除法的需要。實際上,Wikipedia頁面包含此算法的C實現。

相關問題