gpt4 book ai didi

C++ 模数返回错误答案

转载 作者:行者123 更新时间:2023-11-28 02:17:21 24 4
gpt4 key购买 nike

这是我的代码:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int n, i, num, m, k = 0;
cout << "Enter a number :\n";
cin >> num;
n = log10(num);

while (n > 0) {
i = pow(10, n);
m = num / i;
k = k + pow(m, 3);
num = num % i;
--n;
cout << m << endl;
cout << num << endl;
}
k = k + pow(num, 3);
return 0;
}

当我输入 111 时,它会给我这个

1
12
1
2

我正在使用代码块。我不知道出了什么问题。

最佳答案

每当我使用 pow 期望整数结果时,我都会添加 .5 所以我使用 (int)(pow(10,m)+.5) 而不是让编译器自动转换 pow(10,m) 到 int。

我读过很多地方告诉我,其他人已经对我添加 .5 的某些情况进行了详尽的测试,并发现零个情况会有所不同。但准确识别不需要它的条件可能非常困难。在不需要时使用它并没有真正的危害。

如果它有所作为,那就是您想要的不同。如果它没有什么不同,它的成本很小。

在发布的代码中,我会以这种方式调整对 pow 的每次调用,而不仅仅是我用作示例的调用。

log10 的使用没有同样简单的修复方法,但它可能会遇到同样的问题。由于您期望非整数答案并且希望将非整数答案截断为整数,因此添加 .5 将是非常错误的。因此,您可能需要找到一些更复杂的解决方法来解决使用 float 的基本问题。我不确定,但假设是 32 位整数,我认为在转换为 int 之前将 1e-10 添加到 log10 的结果中是两者都不足以将 log10(10^n-1) 更改为 log10(10^n) 但总是足以纠正可能相反的错误。

关于C++ 模数返回错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33672067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com