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

#include <stdio.h> int main() { int n, n_0, m = 0, i = 0, a; scanf("%d", &n); n_0 = n; while (i < 10) { m = 0; while (n != 0) { a = n % 10; if (a == i) m++; n = n / 10; } n = n_0; if (m >= 2) printf("%d ", i); i++; } return 0; }
这段代码的功能是:读入一个整数,然后找出这个整数中所有出现次数大于等于2的数字(0-9),并输出这些数字。

代码的思路是:用外层循环遍历数字0到9,内层循环统计当前数字在原数中出现的次数,如果次数大于等于2就输出。

- 注意内层循环结束后,变量n的值已经变为0,所以需要在外层循环中重新将n赋值为n_0(原始值)。这个重置操作的位置是正确的。
- 变量m在每次外层循环开始时被重置为0,这也是正确的。

代码逻辑基本正确,但有一个小问题:当输入的数字包含前导零时(比如输入0123),scanf会将其读为123,所以数字0的统计可能不准确。不过对于一般的整数输入,这个程序可以正常工作。