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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:51:02