我想求出所有数字的三次幂之和
例如 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;
最佳答案
pow(,) 是一个用于浮点计算的函数,因此您得到的主要结果是一个 float 。当您将此结果分配给一个 int 时,它会隐式转换(强制转换)为一个整数,这意味着它必须去掉所有小数。
因此,如果主要结果恰好是 27.999999998 或由于计算精度有限,这将被转换为整数 27。这是因为 float->int 转换总是向零舍入(它是这样定义的,大概是由于效率原因)。
关于c++ - 这个 pow() 函数在 while 循环 C++ 中发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49628090/