在线编译器 C

#include <stdio.h> int main() { int n; scanf("%d", &n); int arr[10]={0}; int flag=0; while (n > 0) { int d = n % 10; if(arr[d]==1){ flag=1; break; } arr[d]=1; n/10; } if (flag == 1) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数中是否有重复的数字。它用数组记录每个数字是否出现过,如果遇到已经出现过的数字就设置标志并退出循环。

代码中存在一个关键错误:在循环中 `n/10;` 这一行没有将结果赋值回 `n`,导致 `n` 的值永远不会改变,循环会无限执行。

- 检查 `n/10;` 这一行,思考如何正确更新 `n` 的值,让循环能逐位处理数字。
- 另外,数组 `arr` 的大小是10,这足够记录0-9这十个数字,但要注意如果输入的数字位数超过10,逻辑上仍然正确,因为重复检测在发现重复时就会停止。