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+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.

Reply via email to