<問題> 8ビットの2進数を入力、10進数へ基数変換せよ。
実行例: (以下、UNIXのgccでコンパイル。実行。たとえば、こんな出力。重みを計算しています)
[tsuchiya@www1 arc]$ gcc 0401.c
[tsuchiya@www1 arc]$ ./a.out
8ビット = 11001011 ← ここが、入力
2の0乗 1 * 1 = 1 : 1
2の1乗 2 * 1 = 2 : 3
2の2乗 4 * 0 = 0 : 3
2の3乗 8 * 1 = 8 : 11
2の4乗 16 * 0 = 0 : 11
2の5乗 32 * 0 = 0 : 11
2の6乗 64 * 1 = 64 : 75
2の7乗 128 * 1 = 128 : 203
[tsuchiya@www1 arc]$ ./a.out
8ビット = 00011100
2の0乗 1 * 0 = 0 : 0
2の1乗 2 * 0 = 0 : 0
2の2乗 4 * 1 = 4 : 4
2の3乗 8 * 1 = 8 : 12
2の4乗 16 * 1 = 16 : 28
2の5乗 32 * 0 = 0 : 28
2の6乗 64 * 0 = 0 : 28
2の7乗 128 * 0 = 0 : 28 ←
コメント
解答例 #include <stdio.h> #include <string.h> #define N 8 int main() { char binary[N+1]; /* 2進数 N bitを文字列で格納 NULL文字まででN+1 */ int num; /* 10進数 */ int w; /* 2進数の重み */ int i; /* 文字配列のi番目 N-1番目が最後尾 指数 0 */ int val; /* 2進数では0か1 */ int ind; printf("%dビット = ", N); fgets(binary, N+1, stdin); num = 0; /* 10進数の最初は 0 */ ind = 0; /* 指数の初期値 0 */ w = 1; /* 重みの初期値 1 */ for (i = N - 1; i >= 0; i--) { val = binary[i] - '0'; /* アスキーコードの引き算で0か1の判定 */ num += val*w; /* 重みの足し算 */ printf("2の%d乗 %3d * %d = %3d : %3d\n", ind, w, val, val*w, num); w *= 2; ind++; } return 0; }