/* ================== ゾロ目チェック 777や333や22や9999だったらゾロ目。 1桁ではゾロ目と判定されない。 ====[例]12345の場合==== 1の位を記憶する。 1の位 = 12345 % 10(=5) ステップ1  10の位と1の位を比較。  同じだったら次のステップへ。  違っていたらゾロ目ではない。終了。 ステップ2  100の位と1の位を比較。  同じだったら次のステップへ。  違っていたらゾロ目ではない。終了。 以下繰り返し。 1234 % 10 = 4・・・10の位(ここで1の位と10の位が等しくないのでゾロ目ではない。) 123 % 10 = 3・・・100の位 12 % 10 = 2・・・1000の位 1 % 10 = 1・・・10000の位 終了 =================== */ #include #include int double_num(int); /* ゾロ目チェック関数(ゾロ目だと1を返す) */ int main(void) { int num; char a[8]; while(1){ printf("自然数を入力して下さいゾロ。-1を入力すると終了だゾロ-->"); num = atoi(fgets(a,8,stdin)); /* ↑scanfでもOKだが、アルファベットを入力されると暴走するので。 */ if(num == -1) break; if(double_num(num)) puts("その数はゾロ目だゾロ。"); else puts("その数はゾロ目ではないゾロ。"); } return 0; } /* ゾロ目チェック(ゾロ目だと1を返す) */ int double_num(int num) { int y; /* 1桁の場合、ゾロ目ではないので終了 */ if(!(num / 10)) return 0; y = num % 10; /* 1の位を記憶 */ while(1){ num /= 10; /* 10で割って桁を下げる。1234なら123になる。 */ if(!num)break; /* 位が無くなると終了 */ if(y != num % 10) /* 1の位とXの位を比較。 */ return 0; /* 違っていたら終了 */ } return 1; }