Saya seorang pemula yang lengkap untuk pemrograman C++. Saya telah diberi tugas untuk mengkodekan desimal ke heksadesimal, oktal, konversi biner. Saya telah menemukan kesalahan dalam fungsi "binario", ketika saya memasukkan angka desimal yang lebih besar dari 1000, fungsi tersebut memberi saya hasil sebagai angka acak yang tidak masuk akal.

int binario(int n){
    int r,val=0, i=1;
    while (n>0) {
      val=val+(n%2*i);
      n=n/2;
      i=i*10;
   }
   return val;
}


c++
0
davide 11 April 2020, 16:56

1 menjawab

Jawaban Terbaik

Dalam C++, ukuran maksimum untuk int adalah 4 byte yang berarti dari -2.147.483.648 hingga 2.147.483.647. Biner 1024 adalah 10000000000 dan lebih dari kisaran int. Inilah mengapa Anda melihat kesalahannya. Anda dapat menggunakan fungsi Anda untuk angka kurang dari 1024. Saya sarankan Anda menggunakan string untuk fungsi Anda (Anda harus menyertakan header string):

string binario(int n){
    string bin = "";
    while (n>0) {
      bin += to_string(n%2);
      n=n/2;
   }
   //reverse string
   for (int i = 0; i < bin.size() / 2; i++) {
    swap(bin[i], bin[bin.size() - i - 1]); 
   } 

   return bin;
}
2
Mehdi Mostafavi 11 April 2020, 14:43