大数乘法
发布时间:2020-12-14 02:35:07 所属栏目:大数据 来源:网络整理
导读:原理上也是采用数组模拟。 ?a[i]?? 12345 ?b[j]??????? 23 ?用c[k]来保存每次的运算结果,k=i+j; ?c[i+j]=c[i+j]+a[i]*b[j]; ?这里来模拟一次乘法过程: ??????????? 123 ?????????*???12 ????? -------------- ?????????????246??? ????????+ 123 ??????????
原理上也是采用数组模拟。 ?a[i]?? 12345 ?b[j]??????? 23 ?用c[k]来保存每次的运算结果,k=i+j; ?c[i+j]=c[i+j]+a[i]*b[j]; ?这里来模拟一次乘法过程: ??????????? 123 ?????????*???12 ????? -------------- ?????????????246??? ????????+ 123 ??????????? 1476
#include<iostream> #include<string.h> usingnamespace std; int main(void) { char s1[510],s2[510],temp[510]; int a[510],b[510],c[1010]; while(scanf("%s%s",s1,s2)==2) { int i,j,h; int len1,len2; if(strlen(s1)<strlen(s2)) { strcpy(temp,s1); strcpy(s1,s2); strcpy(s2,temp); } len1=strlen(s1); len2=strlen(s2); memset(c,sizeof(c)); for(i=len1-1,j=0;i>=0;i--,j++) { a[j]=s1[i]-48; } for(i=len2-1,j++) { b[j]=s2[i]-48; } for(i=0;i<len2;i++) { for(j=0;j<len1;j++) { c[i+j]=a[j]*b[i]+c[i+j]; } } for(i=0;i<2*len1;i++) { if(c[i]>=10) { c[i+1]=c[i+1]+c[i]/10; c[i]=c[i]%10; } } i=2*len1; while(c[i]==0) { i--; } if(i<0) { printf("0n"); } else { for(;i>=0;i--) printf("%d",c[i]); printf("n"); } } return0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |