/* A*B problem 高精度 */ #include<bits/stdc++.h> using namespace std; int main(void) { char a[10005],b[10005]; int numa[10005],numb[10005]; int multi[30005]; int lena,lenb; cin>>a>>b; lena=strlen(a); lenb=strlen(b); if(lena==1&&a[0]=='0') { cout<<"0"; return 0; } if(lenb==1&&b[0]=='0') { cout<<"0"; return 0; } memset(multi,0,sizeof(multi)); for(int i=0;i<=lena-1;i++){ numa[lena-i-1]=a[i]-'0'; } for(int i=0;i<=lenb-1;i++){ numb[lenb-i-1]=b[i]-'0'; } for(int i=0;i<=lena-1;i++) for(int j=0;j<=lenb-1;j++) { multi[i+j]+=numa[i]*numb[j]; } for(int i=0;i<=lena+lenb-1;i++) { while(multi[i]>=10) { multi[i]-=10; multi[i+1]++; } } int cnt=lena+lenb-1; while(multi[--cnt]!=0) break; for(int i=cnt;i>=0;i--) cout<<multi[i]; return 0; }
高精度乘法的思路与加法减法一样,也是按照列竖式的方法,简单的找规律后我们便能发现第i位与第j位的乘积应该加在结果的第i+j位(i与j都从0开始计数),注意与加法不同的地方在于,每一个位置不能仅仅用赋值来处理,应该用递增,因为对于一个tot,有多组i,j满足i+j=tot。用这样的思路便可写出能实现功能的代码。
标签:10005,lena,高精度,int,multi,cnt,problem,乘法 From: https://www.cnblogs.com/KeviNieZenith/p/16793452.html