统计[n1,n2]区间无重复数字整数个数的C代码输出错误是为什么?
代码问题排查
你提交的代码存在以下几处错误:
- 逻辑执行顺序错误:将数位标记、num更新的代码写在了
break语句之后,且放在了「检测到重复数位」的if分支内,这两行代码永远不会被执行。当数位未重复时,你没有做任何标记和num迭代操作,while循环会陷入死循环;检测到重复时直接break,也不会执行后续代码。 - 合法数判断逻辑位置错误:
if (num == 0) count++的判断放在了for循环外部,只会在遍历完所有数后执行一次,无法对每个遍历的数做合法性校验。 - 变量作用域错误:你在for循环内部重新定义了局部变量
num,循环外判断num == 0时读取的是main函数开头定义的未初始化的num,值是随机垃圾值,判断逻辑完全失效。 - 缺少必要头文件:C语言使用
bool类型需要引入<stdbool.h>头文件,否则编译会报错。
修正后可运行代码
#include <stdio.h> #include <stdbool.h> int main(void) { int n1, n2, count = 0; scanf("%d %d", &n1, &n2); for (int i = n1; i <= n2; i++) { int num = i; bool m[10] = {false}; bool has_dup = false; while (num > 0) { int digit = num % 10; if (m[digit] == true) { has_dup = true; break; } m[digit] = true; num = num / 10; } // 0本身没有重复数位,符合计数要求 if (!has_dup) { count++; } } printf("%d", count); return 0; }
内容的提问来源于stack exchange,提问作者Manisha Jha
相关产品推荐
相关产品推荐

