在线编译器 C

#include <stdio.h> int main() { int x, x0, digit = 0, counter = 0; scanf("%d", &x); x0 = x; while (digit <= 9) { x = x0; counter=0 ; int current_digit; while (x >= 1) { current_digit = x % 10; x = x / 10; if (digit == current_digit) { counter++; } if (counter >= 2) { printf("YES"); return 0; } } digit++; } printf("NO"); return 0; }
这段代码的功能是判断一个整数中是否包含重复的数字(即某个数字出现至少两次)。它通过外层循环遍历数字0到9,内层循环统计每个数字在输入整数中出现的次数,一旦发现某个数字出现两次就立即输出"YES"并结束程序,否则最终输出"NO"。

- 内层循环的条件 `while (x >= 1)` 在处理负数或数字0时可能有问题。当输入为0时,循环不会执行,导致程序直接输出"NO",但0本身包含数字0,且0出现了一次(不重复),所以结果正确。但如果输入是负数,循环也不会执行,会错误地输出"NO"。考虑如何让循环能正确处理所有整数,包括0和负数。

- 代码中每次外层循环都重新将 `x` 赋值为 `x0`,但 `x0` 是原始输入值,这个逻辑本身没问题。不过,当输入数字包含多个相同数字时,内层循环一旦发现重复就会立即返回,效率较高。但注意,如果输入的数字很大(如超过int范围),`scanf` 可能无法正确读取,不过这是输入格式问题,不是代码逻辑错误。