我想找到数字为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;
答案 0 :(得分:4)
pow(,)是一个用于浮点计算的函数,因此您得到的主要结果是浮点数。当您将此结果赋值给int时,它会被隐式转换(强制转换)为整数,这意味着它必须删除所有小数。
因此,如果主要结果恰好是27.999999998或由于计算的准确性有限,那么这将被转换为整数27.这是因为float-&gt; int cast总是向零舍入(它是这样定义的) ,大概是出于效率原因)。
答案 1 :(得分:2)
函数pow
用于浮点数,并且在转换为整数类型时可能会失去精度。尝试将其替换为round(pow(number%10,3))
。