Online Compiler C

#include <stdio.h> int main() { int n,i,save_n,now; scanf("%d",&n); save_n=n; for(i=0;i<=9;i++){ n=save_n; int count_digit=0; while(n>0){ now=n%10; n/=10; if(now==i){ count_digit++;} } if(count_digit>1){ printf("%d ",now);} } return 0; }
这段代码试图找出一个整数中重复出现的数字(出现次数大于1的数字),但存在逻辑错误。

代码的主要思路是:对每个数字0-9,统计它在原数中出现的次数,如果次数大于1就打印该数字。但问题出在打印时使用了变量 `now`,这个变量在循环结束时保存的是最后一位数字,而不是当前正在统计的数字 `i`。

- 在 `while` 循环结束后,`now` 存储的是原数的最后一位数字(因为每次取余后赋值),而不是当前统计的数字 `i`。所以打印的是错误的值。
- 应该打印的是当前统计的数字 `i`,而不是 `now`。