我需要将mpz_t转换为包含数字的int数组。 e.g。
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)
但这不适合。
答案 0 :(得分:1)
分两步走。首先将数字转换为字符数组,其中每个字符代表一个数字。使用mpz_get_str (char *str, int base, const mpz_t op)
。然后将该数组中的每个字符(一个数字)转换为整数。一种方法是从每个角色减去48(ASCII代码为'0'),如果你不介意一点黑客。
顺便说一下,mpz_set_si
用于签名整数。您如何在结果digits[]
中代表负数?也许mpz_set_ui
(对于unsigned int)可能更合适。