Link do tópico: clique aqui
Significado do título: Encontre o produto de dois números, cada número não exceda 1 0 2000 10 ^ {2000}1 02 0 0 0。
Idéia: Supondo que os comprimentos do multiplicador e do multiplicando são la e lb, respectivamente, o comprimento do resultado do produto final é o mais longo la + lb e o mais curto la + lb-1.
Código AC:
#include<iostream>
#include<cstring>
using namespace std;
const int N = 2010;
char A[N], B[N];
int a[N], b[N], c[N];
int main()
{
cin >> A >> B;
int la = strlen(A), lb = strlen(B);
for(int i = 1; i <= la; i++) a[i] = A[la - i] - '0';
for(int i = 1; i <= lb; i++) b[i] = B[lb - i] - '0';
// a[i] * b[j] 的结果存放在 c[i + j - 1]
for(int i = 1; i <= la; i++)
{
for(int j = 1; j <= lb; j++)
{
c[i + j - 1] += a[i] * b[j];
c[i + j] += c[i + j - 1] / 10;
c[i + j - 1] %= 10;
}
}
int lc = la + lb;
while(c[lc] == 0 && lc > 1) lc--; // 去掉多余的前导0
for(int i = lc; i >= 1; i--) cout << c[i];
return 0;
}