This is my modified code. I forgot initialization at some of the lines. Also now I am using gmp_printf
int main() { mpz_t d ; //Will hold my big decimal value size_t nob; // no. Of bits mpz_init (d); // My decximal value is being initialised here char decimalValue[800]; cout << "Please, enter the decimal value: "; cin.getline(decimalValue, sizeof decimalValue); mpz_set_str (d, decimalValue , 10); //Transfering decimalValue into d , decimalValue is base 10 nob = mpz_sizeinbase(d, 2); //Finds how many bits are there in my binary cout<<nob<<"\n"; //Verfied my No. of bits mpz_t base; //Will be used for modulo mpz_init (base); //initialization mpz_set_str (base, "2" , 10); //since I want modulo 2 mpz_t kb[3000]; //will hold my binary bits mpz_array_init (kb[0], 3000, 1); //initialize my array for (int i = nob; i > 0; i--) { mpz_mod(kb[i], d, base); // Finds d % base, and puts in kb[i] mpz_cdiv_q(d, d, base ); // Finds d / base, and puts in d } for (int i = nob; i > 0; i--) { gmp_printf ("%s in decimalValue %Zd %c\n", "These are the bits ", kb[i], decimalValue[i]); } And here is the same output: Please, enter the decimal value: 100 > 7 > These are the bits in decimalValue 0 > These are the bits in decimalValue 0 > These are the bits in decimalValue 1 > These are the bits in decimalValue 1 > These are the bits in decimalValue 1 > These are the bits in decimalValue 0 0 > These are the bits in decimalValue 0 0 > Press any key to continue . . . What is wrong here ? On Monday, December 22, 2014 9:21:37 PM UTC+5:30, Bill Hart wrote: > > I think the problem is that you are mixing C++ and C. The mpz_t type is > the C data type, but you are trying to print it using the C++ cout function. > > You want to use gmp_printf to print the C data types. > > Another problem is you have not called mpz_init on any of the mpz_t's that > you created. > > Bill. > > On 22 December 2014 at 15:41, newcoder <hf.b...@gmail.com <javascript:>> > wrote: > >> Hi, >> >> Thanks a lot for accepting my request to be a member of this group. >> >> This is my first attempt at using MPIR, so please excuse me if you find >> something silly :-) >> >> I was looking for a way to convert very large decimals numbers into >> binary using C. Since I did not find anything I thought of writing my own >> and started exploring MPIR. There might be some easier alternatives but I >> am using MPIR because I have to do some more maths on big numbers. >> >> What I am trying to do is input a decimal number and then convert this >> into binary. My program works fine till it find the number of bits >> required. However something is wrong in the way I am using the operations >> in the second last `for` loops, i.e: >> >> kb[i] = b % 2; >> b /= 2; >> >> >> >> This is what I am trying to convert into MPIR specific operations using >> mpz_mod() and mpz_cdiv_q(). What I have done is: >> >> >> >> mpz_t d; >> mpz_init (d); >> mpz_set_str (d, "2" , 10); //because I want to find (something)mod2 , >> d contains 2 now >> >> for (int i = nob; i > 0; i--) >> { >> mpz_mod(kb[i], b, d); // kb[i] = b % 2 >> mpz_cdiv_q(b, b, d ); // b /= 2; >> >> } >> >> for (int i = nob; i > 0; i--) >> { >> cout<<kb[i]<<"\n"; >> } >> >> This prints: >> >> Please, enter the decimal value: 100 >> 7 >> 0 >> 0 >> 1 >> 1 >> 1 >> 0 >> 0 >> Press any key to continue . . . >> >> Which is wrong. The correct is 01100100 >> >> >> Here is my code: >> >> int main() >> >> { >> >> mpz_t b ; >> size_t nob; //no. of bits will be here >> >> mpz_init (b); //Initialize >> >> char k[80]; //My decimal as an string will go here >> >> cout << "Please, enter the decimal value: "; >> >> cin.getline(k, sizeof k); //decimal value stored as string here >> >> mpz_set_str (b, k , 10); //transfer the string into b, assuming base >> 10 >> >> nob = mpz_sizeinbase(b, 2); // find total number of bits in b >> >> cout<<nob<<"\n"; >> >> >> mpz_t d; >> mpz_init (d); >> mpz_set_str (d, "2" , 10); //because I want to find (something)mod2 >> >> mpz_t kb[80000]; //Array. will store my converted binary bits in kb >> for (int i = nob; i > 0; i--) >> { >> mpz_mod(kb[i], b, d); // implementing kb[i] = b % 2 >> mpz_cdiv_q(b, b, d ); // b /= 2; >> >> } >> >> for (int i = nob; i > 0; i--) >> { >> cout<<kb[i]<<"\n"; >> } >> >> return 0; >> >> } >> >> >> >> Can someone help me solve this issue? >> >> Thanks in advance for your valuable inputs. >> >> >> >> Note: I did not know that the request will be accepted so quickly, so >> posted it on stackoverflow also , which I can't delete now. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "mpir-devel" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to mpir-devel+...@googlegroups.com <javascript:>. >> To post to this group, send email to mpir-...@googlegroups.com >> <javascript:>. >> Visit this group at http://groups.google.com/group/mpir-devel. >> For more options, visit https://groups.google.com/d/optout. >> > > On Monday, December 22, 2014 9:21:37 PM UTC+5:30, Bill Hart wrote: > > I think the problem is that you are mixing C++ and C. The mpz_t type is > the C data type, but you are trying to print it using the C++ cout function. > > You want to use gmp_printf to print the C data types. > > Another problem is you have not called mpz_init on any of the mpz_t's that > you created. > > Bill. > > On 22 December 2014 at 15:41, newcoder <hf.b...@gmail.com <javascript:>> > wrote: > >> Hi, >> >> Thanks a lot for accepting my request to be a member of this group. >> >> This is my first attempt at using MPIR, so please excuse me if you find >> something silly :-) >> >> I was looking for a way to convert very large decimals numbers into >> binary using C. Since I did not find anything I thought of writing my own >> and started exploring MPIR. There might be some easier alternatives but I >> am using MPIR because I have to do some more maths on big numbers. >> >> What I am trying to do is input a decimal number and then convert this >> into binary. My program works fine till it find the number of bits >> required. However something is wrong in the way I am using the operations >> in the second last `for` loops, i.e: >> >> kb[i] = b % 2; >> b /= 2; >> >> >> >> This is what I am trying to convert into MPIR specific operations using >> mpz_mod() and mpz_cdiv_q(). What I have done is: >> >> >> >> mpz_t d; >> mpz_init (d); >> mpz_set_str (d, "2" , 10); //because I want to find (something)mod2 , >> d contains 2 now >> >> for (int i = nob; i > 0; i--) >> { >> mpz_mod(kb[i], b, d); // kb[i] = b % 2 >> mpz_cdiv_q(b, b, d ); // b /= 2; >> >> } >> >> for (int i = nob; i > 0; i--) >> { >> cout<<kb[i]<<"\n"; >> } >> >> This prints: >> >> Please, enter the decimal value: 100 >> 7 >> 0 >> 0 >> 1 >> 1 >> 1 >> 0 >> 0 >> Press any key to continue . . . >> >> Which is wrong. The correct is 01100100 >> >> >> Here is my code: >> >> int main() >> >> { >> >> mpz_t b ; >> size_t nob; //no. of bits will be here >> >> mpz_init (b); //Initialize >> >> char k[80]; //My decimal as an string will go here >> >> cout << "Please, enter the decimal value: "; >> >> cin.getline(k, sizeof k); //decimal value stored as string here >> >> mpz_set_str (b, k , 10); //transfer the string into b, assuming base >> 10 >> >> nob = mpz_sizeinbase(b, 2); // find total number of bits in b >> >> cout<<nob<<"\n"; >> >> >> mpz_t d; >> mpz_init (d); >> mpz_set_str (d, "2" , 10); //because I want to find (something)mod2 >> >> mpz_t kb[80000]; //Array. will store my converted binary bits in kb >> for (int i = nob; i > 0; i--) >> { >> mpz_mod(kb[i], b, d); // implementing kb[i] = b % 2 >> mpz_cdiv_q(b, b, d ); // b /= 2; >> >> } >> >> for (int i = nob; i > 0; i--) >> { >> cout<<kb[i]<<"\n"; >> } >> >> return 0; >> >> } >> >> >> >> Can someone help me solve this issue? >> >> Thanks in advance for your valuable inputs. >> >> >> >> Note: I did not know that the request will be accepted so quickly, so >> posted it on stackoverflow also , which I can't delete now. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "mpir-devel" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to mpir-devel+...@googlegroups.com <javascript:>. >> To post to this group, send email to mpir-...@googlegroups.com >> <javascript:>. >> Visit this group at http://groups.google.com/group/mpir-devel. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "mpir-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to mpir-devel+unsubscr...@googlegroups.com. To post to this group, send email to mpir-devel@googlegroups.com. Visit this group at http://groups.google.com/group/mpir-devel. For more options, visit https://groups.google.com/d/optout.