2015-09-26 211 views
0

我需要將mpz_t轉換爲包含數字的int數組。 例如mpz_t到數組數組C++

mpz_t t1; mpz_set_si(t1,12345); int digits[]; 
mpz_t2digits(t1,digits); //That function I need 
//digits should now be {1,2,3,4,5} 

我知道有一個叫功能,

mpz_export (void *rop, size_t *countp, int order, size_t size, int endian, size_t nails, const mpz_t op) 

但是,這並不適合。

回答

1

分兩步。首先將數字轉換爲一個字符數組,其中每個字符表示一個數字。使用mpz_get_str (char *str, int base, const mpz_t op)。然後將該數組中的每個字符(一個數字)轉換爲一個整數。一種方法是從每個角色減去48(ASCII代碼爲'0'),如果你不介意一點點黑客攻擊。

順便說一句,mpz_set_si是有符號整數。你如何在結果digits[]中代表負數?也許mpz_set_ui(對於unsigned int)可能更合適。

+0

謝謝。但這不是沒有效率嗎? –

+0

我認爲最耗時的部分是從二進制到十進制的基本轉換,這是在這裏無法避免的。將字符額外轉換爲整數是一種簡單的「O(n)」操作。如果性能是你擔心的事情,那麼也許你可以用更多的上下文來更新這個問題,這個函數將使用什麼'mpz_t2digits',以及輸入數字的大小? – WhiteViking