我写了一个程序来打印出所有的数字,其二进制模式在 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,循环会一次又一次地重复。