https://www.luogu.org/problem/P1303
题目描述
求两数的积。
输入格式
两行,两个数。
输出格式
积
输入输出样例
输入 #1
1
2
输出 #1
2
说明/提示
每个数字不超过10^2000,需用高精
代码
#include <iostream>
using namespace std;
int StoA(string s, int a[])
{
int n=s.size();
for(int i=0; i<n; i++)
a[n-1-i]=s[i]-'0';
return n;
}
string AtoS(int a[], int n)
{
string s=""; char c;
for(int i=0; i<n; i++)
{
c=a[i]+'0';
s=c+s;
}
return s;
}
int Multiplication(int a[],int n1, int b[],int n2, int c[])
{
int i,j,k,x,ii;
int carry=0;
for (i=0; i<n2; i++)
{
k=i;
for (j=0; j<n1; j++)
{
x=b[i]*a[j]+carry;
x=c[k]+x;
carry=x/10;
c[k]=x%10;
k++;
}
if (carry>0)
c[k]=carry;
carry=0;
}
while(c[k]==0&&k>0)k--;
return k+1;
}
int main()
{
string s1;
int a[2005]={0}, n1;
string s2;
int b[2005]={0}, n2;
string s3="";
int c[4010]={0}, n3;
cin>>s1>>s2;
n1=StoA(s1, a);
n2=StoA(s2, b);
n3=Multiplication(a,n1, b,n2, c);
s3=AtoS(c, n3);
cout<<s3;
return 0;
}
/*
a[2] a[1] a[0] a[]:
3 8 9 n1:
* 3 4 n2:
b[1] b[0] b[]:
------------------------
1 5 5 6 c[]:
1 1 6 7 n3:
-------------------------
1 3 2 2 6
*/