高精度加乘法——四位改良版

    xiaoxiao2021-03-25  77

    #include<bits/stdc++.h> using namespace std; string st1,st2; int a[500],b[500],len1,len2,len,c[500],m; int main() { cin>>st1>>st2; int l1=st1.size(),l2=st2.size(); for(int i=l1-1,j=0;i>=0;i--,j++) { a[j]=st1[i]-'0'; int x=1; for(int k=1;k<4;k++) { if(i-1<0)break; i--; x*=10; a[j]=(st1[i]-'0')*x+a[j]; };len++; }; len1=len; len=0; for(int i=l2-1,j=0;i>=0;i--,j++) { b[j]=st2[i]-'0'; int x=1; for(int k=1;k<4;k++) { if(i-1<0)break; i--; x*=10; b[j]=(st2[i]-'0')*x+b[j]; };len++; }; len2=len; for(int i=0;i<len1;i++) for(int j=0;j<len2;j++) { c[i+j]+=a[i]*b[j]; c[i+j+1]=c[i+j+1]+c[i+j]/10000; c[i+j]%=10000; }; for(int k=len1+len2-1;k>=0;k--) { m=k; if(c[k]!=0)break; }; cout<<c[m]; for(int i=m-1;i>=0;i--) { if(c[i]>=0&&c[i]<=9)cout<<"000"; if(c[i]>=10&&c[i]<=99)cout<<"00"; if(c[i]>=100&&c[i]<=999)cout<<"0"; cout<<c[i]; }; return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-32958.html

    最新回复(0)