我寫了一個程序來打印出所有數字,其二進制模式是對稱的(例如:1001001,1010101)在1到1993之間。我犯了一個錯誤,我發現了它。但是,有一些細節我還不明白。變量初始化外部和for循環之間的區別
正確的代碼:
#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");
}
}
}
我只是不明白,爲什麼變量 「i」 不能增加至6時, 「K = 0」 外for循環,並且循環將一遍又一遍地重複。
您應該使用調試器來瀏覽這兩個程序,以觀察它們爲什麼會像他們那樣工作。 –