在线编译器 C

#include <stdio.h> int main() { int a; scanf("%d", &a); int used[10] = {0}; int ok = 0; while (a > 0) { int d = a % 10; if (used[d] == 1) { ok = 1; break; } used[d] = 1; a = a / 10; } if (ok == 1) printf("YES"); else printf("NO"); return 0; }
这段代码的功能是:读入一个整数,然后判断它的十进制表示中是否有重复的数字。如果有重复数字,输出"YES",否则输出"NO"。

代码的思路是:用数组used记录每个数字(0-9)是否已经出现过。通过不断取余和整除10来逐位检查数字,如果某位数字已经出现过,就标记重复并退出循环。

- 注意变量a在循环中被修改了,循环结束后a的值不再是原始输入值。如果后续代码需要用到原始值,需要提前保存。
- 检查重复的逻辑是正确的,但可以思考一下:如果输入的数字是负数,程序会怎样?当前代码没有处理负数的情况。