VSCode编译C代码结果异常:预期返回4824实际返回-1
问题分析与修复
问题根源
- 代码中使用
pow(count, 3)计算立方,pow是浮点数运算函数,当count数值较大时(比如4824),浮点数的精度不足以精确表示整数的立方值,会导致计算结果出现微小偏差。 - 累加这些有偏差的数值后,
volume最终会和目标值m(135440716410000)不相等,从而返回-1。 - 另外
main函数中存在类型不匹配问题:findNb返回long long,但被赋值给int类型变量x,可能导致溢出;printf用%ld打印int,格式符不匹配。
修复后的代码
#include <stdio.h> long long findNb(long long m) { long long count = 0; long long volume = 0; while (volume < m) { count++; // 用整数乘法替代pow,避免浮点精度误差 volume += count * count * count; } return volume == m ? count : -1; } int main(void){ // 用long long存储返回值,匹配函数返回类型 long long x = findNb(135440716410000); // 使用%lld打印long long类型 printf("%lld", x); return 0; }
修复说明
- 替换
pow(count,3)为count*count*count:整数乘法能精确计算立方值,完全避免浮点精度丢失问题。 - 修正
main函数的类型和格式符:确保返回值存储和打印的类型一致,避免溢出或格式错误。
内容的提问来源于stack exchange,提问作者daynuu
相关产品推荐
相关产品推荐

