高精度加法
Posted 佰大于
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度加法相关的知识,希望对你有一定的参考价值。
1 #include <stdio.h> 2 #include <string.h> 3 #define MAX 200 //大数最长位数 4 int main() 5 { 6 char str1[MAX]; 7 char str2[MAX]; 8 char ans[MAX+MAX+1]; //用char型节省空间 9 int len1,len2,bit,i,flag; 10 memset(ans,0,sizeof(ans)); 11 printf("Please input a big number:"); 12 scanf("%s",str1); 13 printf("Please input another big number:"); 14 scanf("%s",str2); 15 len1=strlen(str1)-1; 16 len2=strlen(str2)-1; 17 bit=0; 18 while(len1 >= 0 && len2 >= 0) //相同位数相加 19 ans[bit++]=str1[len1--]-‘0‘+str2[len2--]-‘0‘; 20 while(len1 >= 0) //str1多出的位放在结果里面 21 ans[bit++]=str1[len1--]-‘0‘; 22 while(len2 >= 0) //str2多出的位放在结果里面 23 ans[bit++]=str2[len2--]-‘0‘; 24 //deal jinwei 25 len1=strlen(str1); 26 len2=strlen(str2); 27 for(i=0;i<(len1>len2?len1:len2)+1;i++) //处理进位,结果最长不会超过最长的数字位数+1 28 if(ans[i]>=10) 29 { 30 ans[i+1]+=ans[i]/10; 31 ans[i]%=10; 32 } 33 //print 34 printf("%s + %s = ",str1,str2); 35 if(str1[0]=str2[0]==48) //处理 0+0=0 36 { 37 printf("0 \n"); 38 return 0; 39 } 40 flag=0; 41 for(bit=len1+len2-1;bit>=0;bit--) //倒找第一位,即第一个非 \0 42 { 43 if(ans[bit] != ‘\0‘) flag=1; 44 if(flag) printf("%d",ans[bit]); 45 } 46 putchar(‘\n‘); 47 return 0; 48 } 49 50
以上是关于高精度加法的主要内容,如果未能解决你的问题,请参考以下文章