バイナリ パターンが 1 ~ 1993 の間で対称 (例: 1001001 、 1010101 ) であるすべての数字を出力するプログラムを作成しました。ただし、まだ理解できない詳細があります。
正しいコード:
#include <stdio.h>
main() {
int binary[11] = {0};
int i, n, j, k;
for(i = 1; i <= 1993; i++) {
n = i; k = 0;
while(n != 0) {
binary[k++] = n%2 ;
n = n/2;
}
for(j = 0; j < k; j++) {
if(binary[j] != binary[k-j-1])
break;
}
if(j == k) {
printf("%d ", i);
for(j = 0; j < k; j++)
printf("%d", binary[j]);
printf("\n");
}
}
}
間違ったコード:
#include <stdio.h>
main() {
int binary[11] = {0};
int i, n, j, k = 0; /* I have found a mistake here, k=0 should inside the for loop */
for(i = 1; i <= 1993; i++) {
n = i;
while(n != 0) {
binary[k++] = n%2 ;
n = n/2;
}
for(j = 0; j < k; j++) {
if(binary[j] != binary[k-j-1])
break;
}
if(j == k) {
printf("%d ", i);
for(j = 0; j < k; j++)
printf("%d", binary[j]);
printf("\n");
}
}
}
forループの外側で「k = 0」のときに変数「i」が6に増えず、ループが何度も繰り返される理由がわかりません。