gpt4 book ai didi

c++ - 长的有什么问题?为什么自动减1?

转载 作者:行者123 更新时间:2023-11-28 01:30:08 25 4
gpt4 key购买 nike

#include <iostream>
#include <math.h>
#include <algorithm>

using namespace std;

int main() {
int t, c1, c2, res;
string str1, str2;

cin >> t;

for (int i = 0; i < t; i++) {
c1 = c2 = res = 0;
cin >> str1 >> str2;
c1 = count(str1.begin(), str1.end(), '1');
c2 = count(str2.begin(), str2.end(), '1');
cout << (long)(((pow(10, c1) - 1) / 9) * ((pow(10, c2) - 1) / 9)) << '\n';
}
}

对于输入:

1
11111 11111

输出是:

123454321

但是,问题来了,

对于输入:

1
10101 10100

输出是:

1220

另外,对于

1
11000 11000

输出:

120

如果答案的长度小于 4,我不明白为什么 long 从最终答案中减去 1?

注意:这里输入的字符串长度<= 10^5

最佳答案

一些 pow 实现返回不准确的结果,即使精确的结果是可表示的。 Microsoft 的 pow 实现为此臭名昭著。

(long)(((pow(10, c1) - 1)/9) * ((pow(10, c2) - 1)/9)), pow 返回的值略小于正确值,例如返回 99999.999999999985448084771633148193359375 而不是 100000。这会导致其余算术产生的值略小于 1221 而不是 1221。当将其转换为 long,小数被截断,生成 1220

理想情况下,有足够多的人会就此向 Microsoft 或其他不良 pow 例程的发布者投诉,他们会修复它。

如果问题存在,您可以通过将 pow 结果四舍五入到最接近的整数(与 round 函数一样)或编写您自己的幂来解决它例程以满足您的目的。

关于c++ - 长的有什么问题?为什么自动减1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51869997/

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