在线编译器 C

#include <stdio.h> int main() { int n,i,save_n,now; scanf("%d",&n); save_n=n; for(i=0;i<=9;i++){ int count_digit=0; while(n>0){ now=save_n%10; n/=10; if(now==i){ count_digit++;} } if(count_digit>1){ printf("%d",now);} } return 0; }
这段代码试图统计一个整数中每个数字(0-9)出现的次数,并输出出现次数大于1的数字。但代码中存在逻辑错误,导致无法正确实现功能。

- 在while循环中,你每次都用save_n取模,但save_n从未改变,而n被不断除以10,导致循环条件n>0很快失效,且每次内层循环都从同一个数字开始,无法遍历所有数位。
- 变量now在循环结束后保存的是最后一次取模的值,而不是当前正在统计的数字i,因此输出时可能不是你想要的那个重复数字。

建议你重新思考如何正确遍历整数的每一位,并分别统计每个数字的出现次数。注意内层循环中n和save_n的关系,以及何时重置n的值。