Online Compiler C

#include<stdio.h> int main(void) { int n,n0=0,n1=0,n2=0,n3=0,n4=0,n5=0,n6=0,n7=0,n8=0,n9=0,y; scanf("%d",&n); while(n!=0) {y=n%10 n/10; if(y==0,n0++) if(y==1,n1++) if(y==2,n2++) if(y==3,n3++) if(y==4,n4++) if(y==5,n5++) if(y==6,n6++) if(y==7,n7++) if(y==8,n8++) if(y==9,n9++) if(n0=1||n1=1||n2=1||n3=1||n4=1||n5=1||n6=1||n7=1||n8=1||n9=1) { printf("YES"); return 0; } else printf("NO"); } return 0; }
这段代码试图判断一个整数中是否包含重复的数字,但存在多个语法和逻辑错误。

- 第7行 `y=n%10` 缺少分号,导致编译错误。
- 第8行 `n/10;` 只是计算了除法但没有赋值给n,所以n的值永远不会改变,循环会无限执行。
- 第9行开始的 `if(y==0,n0++)` 这种写法是错误的。在C语言中,逗号运算符会先计算左边再计算右边,但这里你本意是条件判断后自增,应该用花括号或正确语法。
- 第19行 `if(n0=1||n1=1||...)` 使用了赋值运算符 `=` 而不是比较运算符 `==`,这会把所有变量赋值为1,条件永远为真。而且这个判断放在循环内部,每次循环都会检查,逻辑也不对。

- 你的思路是:每次取出最后一位数字,对应计数器加1,然后检查是否有某个计数器大于1。但目前的代码没有正确实现这个逻辑。