Online Compiler C

#include <stdio.h> int main() { int a,n; int arr[10]={0}; int flag=0; scanf("%d",&a); while(a>0) { n=a%10; if(arr[n]==1) { flag=1; } else arr[n]=1; a=a/10; } if(flag==1) printf("YES"); else printf("NO"); return 0; }
这段代码的功能是判断一个整数中是否有重复的数字。它通过数组记录每个数字(0-9)是否出现过,如果某个数字出现第二次,就将标志位设为1,最后输出YES(有重复)或NO(无重复)。

- 代码逻辑基本正确,但有一个小问题:当输入的数字包含0时,数组下标arr[0]会被使用,但数组初始化为全0,这没问题。不过,如果输入的数字是0本身,while循环不会执行,因为a>0不成立,此时会直接输出NO,但0这个数字本身只有一个数字0,没有重复,所以输出NO是正确的。但需要注意,如果输入的是负数,while循环也不会执行,同样输出NO,这可能不符合预期。

- 另外,数组大小固定为10,但代码中没有处理输入数字可能超过int范围的情况,不过对于一般练习来说可以接受。