大数乘(正整数)
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。