高精度乘法
Posted 佰大于
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度乘法相关的知识,希望对你有一定的参考价值。
1 #include <stdio.h> 2 #include<string.h> 3 #define MAX 200 //最大位数 4 int main() 5 { 6 int j,k; 7 int len1,len2,len,flag; 8 int c1[MAX],c2[MAX],ans[MAX+MAX+1]; //int存储大数 9 char d1[MAX+1],d2[MAX+1]; //读入大数 10 memset(ans,0,sizeof(ans)); //方便输出结果 11 printf("Please input a big number:"); 12 scanf("%s",d1); 13 printf("Please input another big number:"); 14 scanf("%s",d2); 15 len1=strlen(d1); 16 len2=strlen(d2); 17 j=0; 18 k=len1-1; 19 while(d1[j] != ‘\0‘) //转换成数字存放在int数组 20 c1[k--]=d1[j++]-‘0‘; 21 j=0; 22 k=len2-1; 23 while(d2[j] != ‘\0‘) //转换成数字存放在int数组 24 c2[k--]=d2[j++]-‘0‘; 25 //处理因子为0 26 if(!c1[len1-1] || !c2[len2-1] ) 27 { 28 printf("%s * %s = 0\n",d1,d2); 29 return 0; 30 } 31 //乘法 32 for(k=0; k<len2; k++) 33 for(j=0; j<len1; j++) 34 ans[k+j]+=c1[j]*c2[k]; //列竖式 35 //处理进位 36 len=len1+len2+1; //结果位数不能超过两个数字位数和+1 37 for(k=0; k<len; k++) 38 if(ans[k]>=10) 39 { 40 ans[k+1]+=ans[k]/10; 41 ans[k]%=10; 42 } 43 //输出结果 44 printf("%s * %s = ",d1,d2); 45 flag=0; 46 while(len--) 47 { 48 if(ans[len]!=0) 49 flag=1; 50 if(flag) 51 printf("%d",ans[len]); 52 } 53 putchar(‘\n‘); 54 return 0; 55 }
以上是关于高精度乘法的主要内容,如果未能解决你的问题,请参考以下文章