0

コードは間違った答えを出しています。数値が 42 の場合、101010 になります。わかりました。これは本当です。しかし、number が 4 の場合は 99 になります。間違いは見つかりませんでした。コードを修正するにはどうすればよいですか?

#include<stdio.h>
#include<conio.h>
#include<math.h>

int main()
{
    int i,digit,number=4;
    long long bin= 0LL;
    i=0;
    while(number>0)   
    {
          digit=number%2;
          bin+=digit*(int)pow(10,i);
          number/=2;
          i++;
    }
    printf("%d ",bin);
    getch();   
}
4

2 に答える 2

4

これには浮動小数点計算を使用しないでください。あなたは浮動小数点の気まぐれにさらされています。私のコンパイラであなたのプログラムを実行したところ、出力は 100 でしたpow

コードを動作させ、整数演算のみを使用するための簡単な変更は、次のようになります。

#include<stdio.h>
#include<conio.h>
#include<math.h>

int main()
{
    int digit,number=4;
    long long scale,bin= 0LL;
    scale=1;
    while(number>0)   
    {
          digit=number%2;
          bin+=digit*scale;
          number/=2;
          scale*=10;
    }
    printf("%lld ",bin);
    getch();   
}

しかし、整数ではなく文字列で構築されたバイナリを見たいと思います。

于 2012-09-30T19:27:47.587 に答える
1

より単純で簡単な方法を使用して、10 進数を 2 進数に変換できます。

#include <stdio.h>  

int main()  
{  
    long long decimal, tempDecimal, binary;  
    int rem, place = 1;  

    binary = 0;  

    /* 
     * Reads decimal number from user 
     */  
    printf("Enter any decimal number: ");  
    scanf("%lld", &decimal);  
    tempDecimal = decimal;  

    /* 
     * Converts the decimal number to binary number 
     */  
    while(tempDecimal!=0)  
    {  
        rem = tempDecimal % 2;  

        binary = (rem * place) + binary;  

        tempDecimal /= 2;  
        place *= 10;  
    }  

    printf("\nDecimal number = %lld\n", decimal);  
    printf("Binary number = %lld", binary);  

    return 0;  
}  
于 2015-08-24T06:39:21.947 に答える