#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
Output:
120
我不明白如果答案的长度小于 4,为什么 long 要从最终答案中减去 1?
注意:这里,输入字符串的长度
Some pow
即使可以表示准确的结果,实现也会返回不准确的结果。微软的pow
实施过程因此而臭名昭著。
In (long)(((pow(10, c1) - 1) / 9) * ((pow(10, c2) - 1) / 9))
, pow
返回一个略小于正确值的值,例如返回 99999.999999999985448084771633148193359375 而不是 100000。这会导致算术的其余部分产生一个略小于 1221 而不是 1221 的值。当将其转换为long
,分数被截断,产生1220
.
理想情况下,有足够多的人会向微软抱怨这一点,或者向其他不良出版商抱怨。pow
例程,他们会修复它。
鉴于问题存在,您可以通过四舍五入来解决它pow
结果为最接近的整数(与round
函数)或编写您自己的电源例程来满足您的目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)