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
相关产品推荐
相关产品推荐

