程序本地编译器运行正常 提交CodeChef却报错(题目FLOW006)
代码错误原因分析
- pow函数的浮点数精度问题:
pow()是<math.h>提供的浮点数计算函数,受浮点数精度误差影响,部分场景下pow(10, k)的返回值会略小于理论整数值(例如pow(10,3)实际返回999.9999999999),强制转为int类型时会被截断为999,直接导致数位计算出错。不同平台的浮点数实现逻辑存在差异,这是本地运行正常、提交到CodeChef报错的核心原因。 - 个位数输入的逻辑漏洞:当输入的N为1~9的个位数时,你初始化的
c = pow(10,1)等于10,此时c < N的判断不成立,内层循环直接跳过,累加变量e始终为0,会输出错误结果0而非正确的N本身。 - 边界值1000000的处理错误:题目允许N最大为1000000,现有循环逻辑处理该值时也会得到错误结果,正确数位和为1,你的代码会输出错误值。
修复方案
计算数位和不需要调用pow函数,使用整数取模、整除操作即可实现,逻辑更简单且完全没有精度问题,参考实现如下:
#include <stdio.h> int main(void) { int T, N; scanf("%d", &T); while (T--) { scanf("%d", &N); int sum = 0; int temp = N; while (temp > 0) { sum += temp % 10; temp /= 10; } printf("%d\n", sum); } return 0; }
内容的提问来源于stack exchange,提问作者Aseem Mittal
相关产品推荐
相关产品推荐

