pow 函数如何工作?

2023-11-29

编译以下程序后,我得到输出“2346”,但预期为“2345”。

#include<math.h>
#include<iostream.h>
int nr_cif(int a)
{
    int k=0;
    while(a!=0)
    {
        a = a/10;
        k++;
    }
    return k;
}

void Nr(int &a){
    int k = nr_cif(a);
    a = a % (int)pow(10,k-1);
}


int main()
{
    int a = 12345;
    Nr(a);
    cout<<a;
}

调试后我注意到它在评估后出现错误: a = a % (int)pow(10,k-1)。为什么这里会断呢?


使用这不是一个好主意pow对于整数数学。我将代码更改如下:

void Nr(int &a)
{
    int ten_k = 1;
    while (ten_k < a) ten_k *= 10;
    a %= ten_k/10; // 10-to-the-(k-1)
}

您的代码中没有任何内容需要十进制位数,只需要位数。因此,将 place 值设置为变量。

(您也可以使用原来的 while 循环,它对于负输入效果更好。但计算并返回 10 的 k 次方,而不是 k)。

问题在于pow其特点是它使用浮点值,并给出非常接近但不精确的结果。该错误可能足以导致舍入值(在转换为int)是错误的。您可以通过在转换之前添加 0.5 来解决这个问题...但是没有意义,因为在循环中相乘比调用更快pow anyway.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pow 函数如何工作? 的相关文章

随机推荐