我已经完全理解了代码:
程序代码:
可能代码格式不好,明天有空将这个程序分函数写。中间还有个优化,可以去掉。 CODE: #include <stdio.h> #include <stdlib.h> #include <string.h> void rollback(char array[],int Len)//反转 { char temp; int i; for(i=0;i<Len/2;i++) temp=array[i],array[i]=array[Len-i-1],array[Len-i-1]=temp; } int main() { char a[1000],b[1000],sum[10000]; int length_a,length_b,i;//a串的长度,b串的长度 gets(a),gets(b);//获取字符串 length_a=strlen(a),length_b=strlen(b);//获取a串的长度,b串的长度 rollback(a,length_a),rollback(b,length_b);//反转字符串 while(a[i]!='\0'&&b[i]!='\0')//先相加字符串 { sum[i]=a[i]+b[i]-48; i++; } if(a[i]=='\0')//i这时是最后一个字符,如果等于0 while(b[i]!='\0')//如果b也不等于0,那么没有进位直接填入sum { sum[i]=a[i]; i++; } else while(a[i]!='\0')//同上,反之 { sum[i]=a[i]; i++; } sum[i]='\0';//将最高位填入0,以免溢出 for(i=0;sum[i]!='\0';i++)//循环strlen(sum)次 if(sum[i]>'9') //满10进一 { sum[i]-=10;//将sum减去10 if(sum[i+1]=='\0') sum[i+1]='1',sum[i+2]='\0';//如果遇到高位0,那么将最高位填入1,将溢出位往前移动 else sum[i+1]++;//否则就直接进位 } rollback(sum,strlen(sum));//反转回来 puts(sum);//打印字符串 system("pause"); return 0; } ================================================================================================== 优化部分为: while(a[i]!='\0'&&b[i]!='\0')//先相加字符串 { sum[i]=a[i]+b[i]-48; i++; } if(a[i]=='\0')//i这时是最后一个字符,如果等于0 while(b[i]!='\0')//如果b也不等于0,那么没有进位直接填入sum { sum[i]=a[i]; i++; } else while(a[i]!='\0')//同上,反之 { sum[i]=a[i]; i++; } ================================================================================================== 优化思路为: 如果遇到: 1000000000000+1,那么可以将1直接填入计算,免去后面进位步骤
欢迎来到我的博客:http://blog..cn/noisunyuhong