<問題> 正の10進数を入力、2進数へ基数変換せよ。
実行例: 2で割り続ける、よく見る方法 143 = 2(71) + 1 = 2(2*35 + 1) + 1 という書き換えを繰り返す計算を行っている。
[tsuchiya@www1 arc]$ ./a.out 10進数 (65535以下の正の数) = 123 ← 入力 123 ÷ 2 = 61 あまり 1 61 ÷ 2 = 30 あまり 1 30 ÷ 2 = 15 あまり 0 15 ÷ 2 = 7 あまり 1 7 ÷ 2 = 3 あまり 1 3 ÷ 2 = 1 あまり 1 1 ÷ 2 = 0 あまり 1 変換後の2進数 = 1111011
[tsuchiya@www1 arc]$ ./a.out 10進数 (65535以下の正の数) = 65535 65535 ÷ 2 = 32767 あまり 1 32767 ÷ 2 = 16383 あまり 1 16383 ÷ 2 = 8191 あまり 1 8191 ÷ 2 = 4095 あまり 1 4095 ÷ 2 = 2047 あまり 1 2047 ÷ 2 = 1023 あまり 1 1023 ÷ 2 = 511 あまり 1 511 ÷ 2 = 255 あまり 1 255 ÷ 2 = 127 あまり 1 127 ÷ 2 = 63 あまり 1 63 ÷ 2 = 31 あまり 1 31 ÷ 2 = 15 あまり 1 15 ÷ 2 = 7 あまり 1 7 ÷ 2 = 3 あまり 1 3 ÷ 2 = 1 あまり 1 1 ÷ 2 = 0 あまり 1 変換後の2進数 = 1111111111111111
コメント
解答例 #include <stdio.h> #define N 16 int main() { int n; /* 変換前の10進数 */ int b[N]; /* 変換後の2進数 */ int i; /* b[]の格納位置 */ /* キーボードから10進数を入力する */ printf("10進数 (65535以下の正の数) = "); scanf("%d", &n); /* 10進数を2進数に変換する */ i = 0; while (n) { printf("%6d ÷ 2 = %6d あまり %3d\n", n, n / 2, n % 2); b[i] = n % 2; /* 小さい桁の値が前に格納 */ n /= 2; i++; } /* 変換後の2進数を表示 配列を逆に表示して、大きな桁を前に */ printf("変換後の2進数 = "); i--; while (i >= 0) { printf("%d", b[i]); i--; } printf("\n"); return 0; }