大数乘(正整数)
发布时间:2020-12-14 02:14:41 所属栏目:大数据 来源:网络整理
导读:大数乘(正整数) My ? solution: /*2015.10.31*/ #includestdio.h#includestring.hint t1[100],t2[100],t3[1000]; char c1[100],c2[100];int main(){int i,j=0,m1,m2,k=0,g;gets(c1);gets(c2);memset(t3,sizeof(t3));m1=strlen(c1);m2=strlen(c2);for(i=m1-1;
大数乘(正整数) My ? solution: /*2015.10.31*/
#include<stdio.h> #include<string.h> int t1[100],t2[100],t3[1000]; char c1[100],c2[100]; int main() { int i,j=0,m1,m2,k=0,g; gets(c1); gets(c2); memset(t3,sizeof(t3)); m1=strlen(c1); m2=strlen(c2); for(i=m1-1;i>=0;i--) { t1[j++]=c1[i]-'0'; } j=0; for(i=m2-1;i>=0;i--) { t2[j++]=c2[i]-'0'; } for(i=0;i<m1;i++) { k=i;/*当t1数组中的第i个元素和t2整个数组相乘时,把求得的结果按位依次存放在以i为下标起点的t3数组中,见下图*/ for(j=0;j<m2;j++) { t3[k++]+=t1[i]*t2[j]; } } for(i=0;i<k;i++) { if(t3[i]>9) { g=t3[i]/10; t3[i]%=10; if(i==k-1)/*考虑最高位进位,所以数组长度也要增加,可能某个数组元素为3位数,例124,则原则上需连续两次进位*/ { /*,但实际只需进一次位即12,12加入到新的数组元素中再通过上述循环继续进位就解决了*/ k+=1; } t3[i+1]+=g; } } for(i=k-1;i>=0;i--) printf("%d",t3[i]); return 0; } /* 如: t3[4] t3[5] t3[6] (上述程序:) 124 56 0 4 12+56=68 0 4 8 6 较复杂方法:4+2*10+1*100 5*10+6 0 4 2+6+5*10 1 4 2+6 1+5 */ //下标: 6 5 4 3 2 1 0 // t2元素: 2 3 5 4 8 6 //t1元素: 4 3 1 2 //第一次相乘结果: * * * * * *(i=0) //第二次相乘结果: * * * * * * (i=1) //第三次。。。。。。 * * * (i=2) //第四次 .......... * * (i=3) //把四次结果相加放入t3数组中......... //再考虑进位。 类似: 243 X 21 __________ 243 486 —————— 5103 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |