首页 > 代码库 > 大数运算

大数运算

大数加法:

 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #define M 100 5 char *add(char s1[],char s2[]); 6 int main(){ 7     char s1[M],s2[M],*s;        //此时不能使用strlen(s),s没有初始化。 8     scanf("%s",&s1); 9     printf("+\n");10     scanf("%s",&s2);11     printf("=\n");12     s=add(s1,s2);                //必须同为指针类型13     printf(s);14     printf("\n");15 }16 17 char *add(char s1[],char s2[]){18     int i,j,t,m,max,len1,len2;19     int a[M],b[M],c[M];20     char *s;21     s=(char*)malloc(M*sizeof(char));     //分配内存是为了返回该指针时内有数据。22     len1=strlen(s1);23     len2=strlen(s2);24     for(i=0,j=len1-1;i<len1;i++,j--)25         a[i]=s1[j]-0;                    //做整形时a[0]存放的是数的最低位个位26     for(i=0,j=len2-1;i<len2;i++,j--)27         b[i]=s2[j]-0;28     max=len1>len2?len1:len2;29     t=0;m=0;30     if(len1==max)                            //将小的数后面用0补全,不然后面对位相加时会出现问题31         for(i=len2;i<max;i++)b[i]=0;32     else33         for(i=len1;i<max;i++)a[i]=0;34     for(i=0;i<max;i++){                        //对位相加35         t=a[i]+b[i]+m;36         m=t/10;37         c[i]=t%10;38     }39     if(m!=0)                                //最高是否进位40         c[i]=m;41     else 42         i--;43     for(j=0;i>=0;i--,j++){44         s[j]=c[i]+0;45         //printf("%d",c[i]);46     }47     s[j]=\0;                                //字符串结束符,不然会输出“烫烫。。。”48     return s;49 }