我已经完全理解了代码: 程序代码:
程序代码:
 										
					
	
	
	
			 程序代码:
程序代码:可能代码格式不好,明天有空将这个程序分函数写。中间还有个优化,可以去掉。
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



 
											





 
	    

 
	

 
										
					
	

 回帖切磋是一种美德
回帖切磋是一种美德