失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > [Nowcoder] 大整数相乘(拼多多笔试题)

[Nowcoder] 大整数相乘(拼多多笔试题)

时间:2021-05-25 23:07:36

相关推荐

[Nowcoder] 大整数相乘(拼多多笔试题)

有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。

输入描述:

空格分隔的两个字符串,代表输入的两个大整数

输出描述:

输入的乘积,用字符串表示

输入例子1:

72106547548473106236 982161082972751393

输出例子1:

70820244829634538040848656466105986748

大数乘法问题

简单来说就是把A[i]*B[j]累加放到临时数组的C[i+j]位置。

然后对数组C执行进位加法即可。

剩下的步骤就是字符与数字之间的转换与逆序问题。

参考代码如下:

#include <iostream>#include <string>#include <vector>using namespace std;int main(){string str1, str2;while (cin >> str1 >> str2){int n1 = str1.size(), n2 = str2.size();vector<int> v1, v2;// 将两个字符串放入数组中并逆序for (int i = n1 - 1; i >= 0; --i){v1.push_back(str1[i] - '0');}for (int i = n2 - 1; i >= 0; --i){v2.push_back(str2[i] - '0');}// 待处理的临时数组vector<int> v(n1 + n2, 0);for (int i = 0; i < n1; ++i){for (int j = 0; j < n2; ++j){v[i + j] += v1[i] * v2[j];}}// 处理数组中的加法进位for (int i = 0; i < n1 + n2-1; ++i){v[i + 1] += (v[i] / 10);v[i] = v[i] % 10;}string res;// 判断最终结果的有效位数int m = n1 + n2 - 1;if (v[n1 + n2 - 1] == 0)m = n1 + n2 - 2;// 将结果转换为字符串for (int i = m; i >= 0; --i){res += (v[i] + '0');}cout << res << endl;}return 0;}

如果觉得《[Nowcoder] 大整数相乘(拼多多笔试题)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。