题目描述
给出两个非负整数,求它们的乘积。
输入格式
输入共两行,每行一个非负整数。
输出格式
输出一个非负整数表示乘积。
样例 #1
样例输入 #1
1
2
样例输出 #1
2
提示
每个非负整数不超过 1 0 2000 10^{2000} 102000。
解题步骤:
1.高精度数字利用字符串读入
2.把字符串翻转存入两个整形数组A,B
3.从低位到高位,累加乘积,进位,存余
4.把数组C从高位到低位依次输出
时间复杂度:O(n^2)
我的代码:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N = 5000;
int a[N], b[N], c[N];
int la, lb, lc;
void mul(int a[], int b[], int c[]) {
for (int i = 0; i < la; i++) {
for (int j = 0; j < lb; j++) {
c[i + j] += a[i] * b[j];
c[i + j + 1] += c[i + j] / 10;
c[i + j] %= 10;
}
}
while (lc && c[lc] == 0)lc--;
}
int main() {
string s1, s2;
cin >> s1 >> s2;
la = s1.size(), lb = s2.size();
lc = la + lb;
for (int i = la - 1; ~i; i--)a[la - 1 - i] = s1[i]-'0';
for (int i = lb - 1; ~i; i--)b[lb - 1 - i] = s2[i] - '0';
mul(a, b, c);
for (int i = lc; ~i; i--)cout << c[i];
return 0;
}