小Z老师最近在玩一个有意思的游戏,他手上有两个很大的数 a 和 b。对于 a,他会把它翻转过来得到一个数 a′,然后把 a′ 拼接在 a 的后面得到一个新的数 A,例如对于 123 这个数来说,翻转过来是 321,拼起来之后就是 123321;对于 100 这个数,翻转过来是 001,拼起来之后就是 100001。对于 b,他也会进行同样的操作,得到新的数 B。然后,他会求出 A×B 的结果,请你帮他完成这个过程。 输入格式 共两行。 第一行,一个很大的正整数 a。 第二行,一个很大的正整数 b。 输出格式 仅一行,一个正整数,表示最后的结果。 样例输入 12 676 样例输出 826221396 数据范围 记 n 为 a 的位数,m 为 b 的位数。 对于 100% 的数据,保证 n<=100,m<=100。
时间: 2024-04-17 14:27:24 浏览: 146
我们可以按照题目的要求,将字符串 a 和 b 进行翻转和拼接,然后将它们转换为大整数类型进行相乘。
具体的算法如下:
1. 定义一个函数 reverseNum,接收一个字符串 num,将 num 翻转过来并返回。
2. 将字符串 a 和 b 分别翻转得到 a' 和 b'。
3. 将 a 和 a' 拼接得到字符串 A,将 b 和 b' 拼接得到字符串 B。
4. 将 A 和 B 转换为大整数类型,并计算它们的乘积 result。
5. 将 result 转换为字符串类型,并输出。
下面是具体的实现代码:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
#include <cstdlib>
using namespace std;
string reverseNum(string num) {
reverse(num.begin(), num.end());
return num;
}
int main() {
string a, b;
cin >> a >> b;
string a_reverse = reverseNum(a);
string b_reverse = reverseNum(b);
string A = a + a_reverse;
string B = b + b_reverse;
long long result = stoll(A) * stoll(B);
cout << result << endl;
return 0;
}
```
你可以按照题目要求输入两个很大的正整数 a 和 b,然后运行代码即可得到最后的结果。注意,由于题目给出的是很大的正整数,所以我们需要使用大整数类型进行计算,这里使用了 `stoll` 函数将字符串转换为长长整型。
阅读全文