我正在学习GMP。所以,我决定写一个十进制到二进制作为第一个和the simplest problem或here。但是,我被卡住了。我真的不明白为什么我的代码不起作用(代码很脏,我知道):
1. unsigned long int j=0;
2. unsigned long int idx=0;
3. unsigned long int p=2;
4. unsigned long int m=1;
5. unsigned long int ten=10;
6. mpz_t decimal,quotient, binary,remainder,multiplicant,base,idx_10;
8. mpz_inits(decimal,quotient,binary,remainder,multiplicant,base,idx_10,NULL);
9. mpz_set_ui(base,p);
10. mpz_set_ui(idx_10,m);
12. while (mpz_cmp_ui(decimal,j)!=0) {
13. mpz_mod(remainder,decimal,base);
14. mpz_mul(multiplicant,remainder,idx_10);
15. mpz_add(binary,binary,multiplicant);
16. mpz_cdiv_q(decimal,decimal,base);
17. mpz_mul_ui(idx_10,idx_10,ten);
18. }
我知道我不需要定义p和m,因为有接受无符号整数的替代mod和除法指令。但是,我认为这个问题是因为这些问题。经过几个小时的努力与代码,我注意到十进制永远不会变为零,这是奇怪的。 mpz_cdiv_q ' mpz_cdiv_q ' (第16行),但它必须变为零。它变为无穷大,十进制永远不会变为零。这是一个错误吗?
感谢任何帮助。