高精度乘法

1127: 高精度高精度乘法

题目描述

输入两个高精度正整数m,nm,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 } 

**高精度乘法,相乘之后的位数就是两个数的位数相加减一(代买中ij不是他们的位数),根据竖式可得出是相乘之后,对应位数的数字相加。相加之后处理进位问题。

原文地址:https://www.cnblogs.com/rax-/p/8526224.html