1127: 高精度高精度乘法
题目描述
输入两个高精度正整数m,n(m,n都在200位以内),输出它们的乘积。
输入
两行,每行一个整数
输出
一行,一个整数
样例输入
5
10
样例输出
50
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 char a[1001],b[1001]; 5 long long lena,lenb,i,j,n[10001]; 6 int main() 7 { 8 cin>>a>>b; 9 lena=strlen(a); 10 lenb=strlen(b); 11 for(i=0;i<=lena-1;i++) for(j=0;j<=lenb-1;j++) n[i+j+1]+=(int(a[i])-48)*(int(b[j])-48);//诸位相乘保存在对应的位置然后加 12 for(i=lena+lenb-1;i>1;i--) 13 if(n[i]>=10) 14 { 15 n[i-1]+=n[i]/10; 16 n[i]%=10;//处理进位问题 17 } 18 for(i=1;i<=lena+lenb-1;i++) cout<<n[i]; 19 }
**高精度乘法,相乘之后的位数就是两个数的位数相加减一(代买中i,j不是他们的位数),根据竖式可得出是相乘之后,对应位数的数字相加。相加之后处理进位问题。