0

C プログラミング言語で、10 進数を 2 進数に変換するプログラムを作成する割り当てがあります。

これは私が書いたコードです:

#include <stdio.h>
#define MAX_LEN 1000

void translate_dec_bin(char s[]){
    unsigned int decNum;
    sscanf_s(s, "%d", &decNum);

    while (decNum > 0){
        printf("%d", decNum % 2);
        decNum = decNum / 2;
    }
    printf("\n");
}

main(){
    char s[MAX_LEN];
    char c='\0';
    int count=0;
    printf("enter a nunber\n");
    while (c < MAX_LEN && ((c = getchar()) != EOF) && c != '\n'){
        s[count] = c;
        ++count;
    }
    translate_dec_bin(s);
}

ただし、入力が 1 の場合、得られる出力は 0001 ではなく 1 です。つまり、出力に 0 が表示されるようにします。どうやってやるの?

4

2 に答える 2

1

まず、mah のコメントを読んでください。彼は核ミサイルでハエを攻撃することを提案していますが、あなたには正しいアプローチを提案しています。

しかし、この場合、問題は単純です。translate_dec_bin 関数のループは終了します。何もすることがないからです。

少し考えてみてください。あなたの条件は「decNum が 0 より大きい間、1 または 0 を出力する」ですよね?C では、整数を割ると余りが切り捨てられるので、1/2=0 になることはもうご存知だと思います。

コードを見てください。引数「1」を指定すると、ループは 1 回だけ繰り返されるため、出力には 1 文字しか含まれません。

より多くの文字が必要な場合は、より多くの条件が必要です。私はあなたにそれらを考え出すことを任せます.mahが示唆したように、私はその評判に飢えているわけではありません:)

ところで、1000 桁の数字を unsigned int に収めることはできません。それがあなたがやろうとしていることです。

于 2013-11-08T21:35:56.290 に答える
0

すでに 10 進数を計算していると仮定すると、印刷書式設定を使用しない基本的な考え方は次のとおりです。

char* list[] = {"0000", "000", "00", "0", ""};

char* leading_of(int num) {
   int v = 0;
   while(num > 0 && v < 4){
      num = num /10;
      v++;
   }
   return list[v];
}

printf("%s%d", leading_of(decNum), decNum);

文字数またはパディング文字が可変である場合は、リストを削除して、代わりにもっと賢いことをする必要があります。

于 2013-11-08T21:32:08.850 に答える