while循环C ++中这个pow()函数发生了什么?

时间:2018-04-03 10:44:20

标签: c++ algorithm

我想找到数字为3的所有数字的总和

例如14 = 1 ^ 3 + 4 ^ 3 = 65

我尝试使用下面的c ++编写代码,但如果我使用pow()函数则错误。

int number;
int sum = 0;

std::cin >> number;
while(number > 0) {
    sum += pow((number%10),3);
    number /= 10;
}
std::cout << sum << std::endl;
return 0;

以上代码。 如果输入153 输出应为= 3 ^ 3 + 5 ^ 3 + 1 ^ 3 = 153 但实际产量是152

但是它下面的代码工作得很好,为什么?谢谢

int number;
int sum = 0;
std::cin >> number;
while(number > 0) {
   sum += (number % 10) * (number % 10) * (number % 10);
   number /= 10;
}
std::cout << sum << std::endl;
return 0;

2 个答案:

答案 0 :(得分:4)

pow(,)是一个用于浮点计算的函数,因此您得到的主要结果是浮点数。当您将此结果赋值给int时,它会被隐式转换(强制转换)为整数,这意味着它必须删除所有小数。

因此,如果主要结果恰好是27.999999998或由于计算的准确性有限,那么这将被转换为整数27.这是因为float-&gt; int cast总是向零舍入(它是这样定义的) ,大概是出于效率原因)。

答案 1 :(得分:2)

函数pow用于浮点数,并且在转换为整数类型时可能会失去精度。尝试将其替换为round(pow(number%10,3))