Онлайн компилятор C

#include <stdio.h> int main() { int n,save_n; scanf("%d",&n); save_n=n; for(int digit=0;digit<=9;digit++){ int counter=0; n=save_n; while(n>0){ int cur=n%10; n=n/10; if(cur==digit){ counter++; } } if(counter>1){ printf("%d",counter); } } }
这段代码的功能是:读取一个整数,然后统计数字0到9中每个数字在整数中出现的次数,如果某个数字出现次数大于1,就输出该次数。

代码的主要逻辑是:外层循环遍历数字0到9,内层循环通过取余和除法逐位提取原数的每一位,并与当前数字比较计数。每次外层循环开始时,都会将n重置为原始值。

代码存在一个逻辑问题:输出的是出现次数大于1的数字的出现次数,但没有指明是哪个数字。另外,如果所有数字都只出现一次或零次,程序不会有任何输出。

- 注意输出格式:题目可能要求输出具体的数字及其出现次数,而不仅仅是次数。检查输出语句是否缺少了数字本身的标识。
- 思考循环结构:每次外层循环都重置n为save_n,但内层循环会修改n,导致外层循环的每次迭代都正确。这个重置逻辑是正确的,但可以思考是否有更高效的方式。