1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| #include<iostream> #include<cstdio> #include<cstring> using namespace std; char a[1000],b[1000],c[1000];
void add(char s1[],char s2[],char ans[]){ if(s1[0]=='0'&&s2[0]=='0'){ strcpy(ans,"0"); return; } int al=strlen(s1),bl=strlen(s2),pa=al-1,pb=bl-1; short a[1000]={0},b[1000]={0}; int i,j,jw=0,t1,t2=0;
for(i=0;i<al;i++) a[i]=s1[al-1-i]-'0';
for(i=0;i<bl;i++) b[i]=s2[bl-1-i]-'0';
t1=max(al,bl); for(i=0;i<t1;i++){ a[i]=a[i]+b[i]+jw; jw=a[i]/10; a[i]%=10; }
a[i]=jw; while(a[i]==0)i--; for(;i>=0;i--){ ans[t2]=a[i]+'0'; t2++; } ans[t2]='\0'; }
void mul(char s1[],char s2[],char ans[]){ if(s1[0]=='0'||s2[0]=='0'){ strcpy(ans,"0"); return; } int al=strlen(s1),bl=strlen(s2),pa=al-1,pb=bl-1; if(al<bl){ swap(s1,s2); swap(al,bl); } short a[1000]={0},b[1000]={0},c[1000]={0}; char tans[1000]={0}; int i,j,k,jw=0,t1=0,t2=0;
for(i=0;i<al;i++) a[i]=s1[al-1-i]-'0';
for(i=0;i<bl;i++) b[i]=s2[bl-1-i]-'0'; strcpy(ans,"0"); for(i=0;i<bl;i++){ jw=0; for(j=0;j<al;j++){ c[i+j]=a[j]*b[i]+jw; jw=c[i+j]/10; c[i+j]%=10; } c[i+j]=jw; while(c[i+j]==0)j--; t2=0; for(j=i+j;j>=0;j--){ tans[t2]=c[j]+'0'; c[j]=0; t2++; } tans[t2]='\0'; add(ans,tans,ans); } }
int main(){ scanf("%s%s",a,b); mul(a,b,c); puts(c); return 0; }
|