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

C++中while循环用pow()计算数字立方和为何出错?

为什么用pow()计算立方和会出错?

你踩的这个坑其实挺常见的——pow()是针对浮点数设计的数学函数,存在精度误差,这就是导致输入153时输出152的核心原因。

具体原因拆解:

pow()函数返回的是double类型的浮点数,而浮点数在计算机里是用二进制近似表示的。比如计算pow(5, 3)时,底层运算可能得到的不是精确的125,而是一个非常接近125但略小于它的值(比如124.99999999999999)。当你把这个浮点数加到int类型的sum里时,会自动触发截断取整——直接丢掉小数部分,结果就变成了124。

那153的各位立方和本来是:

1³ + 5³ + 3³ = 1 + 125 + 27 = 153

但因为5的立方被错误地取整为124,总和就变成了1 + 124 + 27 = 152,正好和你看到的错误结果一致。

正确的写法:用整数乘法代替pow()

对于整数的整数次幂,完全不需要用浮点函数,直接用整数乘法既高效又精确。修改后的代码如下:

int number; 
int sum = 0; 
std::cin >> number; 
while(number > 0) { 
    int digit = number % 10; // 先取出当前位的数字
    sum += digit * digit * digit; // 用整数乘法计算立方
    number /= 10; 
} 
std::cout << sum << std::endl; 
return 0;

这样计算时,所有运算都是整数类型的精确运算,不会有任何精度损失,输入153就能得到正确的153了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:10:42