You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

统计[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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:15:03