首页 > 代码库 > 大数运算
大数运算
大数加法:
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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。