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

C语言数字位数统计程序隐藏测试用例失败求助

问题排查:C语言数字位数统计隐藏测试用例失败原因

你的代码在常规测试用例中运行正常,但隐藏用例全部失败,核心问题集中在以下几个场景:

1. 未处理输入为0的情况

当输入0时,代码执行if(n < 1)后n仍为0,后续while(n > 0)循环不会触发,最终输出位数为0,但实际上0应当被统计为1位。

2. INT_MIN整数溢出问题

C语言中int的取值范围通常是-2147483648到2147483647。当输入-2147483648时,执行n = -n会触发溢出——2147483648超出了int的最大值,属于未定义行为,会导致统计结果错误。

3. 未处理超出int范围的正数输入

若测试用例包含大于2147483647的正数(比如10位数1234567890),scanf("%d", &n)会读取失败,n值未初始化,后续逻辑会输出错误结果。


修复方案示例

可以通过以下两种思路解决问题:

方案1:使用更大范围的数值类型

#include <stdio.h>

int main() {
    long long n;
    int count = 0;
    scanf("%lld", &n);
    
    if (n == 0) {
        count = 1;
    } else {
        if (n < 0) {
            n = -n;
        }
        while (n > 0) {
            n /= 10;
            count++;
        }
    }
    printf("Number of digits: %d\n", count);
}

方案2:通过字符串读取统计(更稳妥,无需考虑数值范围)

#include <stdio.h>
#include <string.h>

int main() {
    char num[20];
    scanf("%s", num);
    int count = strlen(num);
    // 排除负号的长度
    if (num[0] == '-') {
        count--;
    }
    printf("Number of digits: %d\n", count);
}

内容的提问来源于stack exchange,提问作者SpaciousCoder78

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:54:55