【发布时间】:2018-08-16 05:12:52
【问题描述】:
#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?
注意:这里,输入字符串的长度
【问题讨论】:
-
pow适用于浮点数。(long)通过截断浮点数将它们转换为long -
您的意思是在使用它们之前将每个指数项转换为 long,例如在一个部门?
-
@Scheff:这不是浮点精度问题。 OP 询问的计算完全可以用浮点计算,没有错误。问题是他们的
pow实现返回不准确的结果,而准确的结果是可表示的并且由良好的pow实现返回。如果strcmp失败是因为一个糟糕的实现错误地处理了整数,你不会说这是一个整数算术问题;你会说这是一个strcmp错误。所以如果一个糟糕的pow实现导致了问题,那是pow错误,而不是浮点问题。 -
@AlanBirtles:这不是那个的复制品。
标签: c++ casting floating-point