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

标签 c++ algorithm

我想求出所有数字的三次幂之和

例如 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/

相关文章:

c++ - GstBuffer 到颜色垫

algorithm - 什么是动态世界中用于查询的 KD 树类数据结构?

c# - 防止实体在头顶射击游戏中相互堆叠

algorithm - 在哪些现实场景中语义数据库比关系数据库更好?

c++ - IBM 单精度 float 据转换为预期值

c++ - 数据是不同继承类型的二叉树

c++ - 具有纯虚函数实现的类

c# - 计算一周内工作的天数而不循环?

算法 |将 O(N^2) 的复杂性解决为更小的东西?

c++ - 无法访问类 sf::NonCopyable 中的私有(private)成员。拷贝在哪里? C++