网上某位大神的思路很符合我的三观,顺着看下来竟然每行都看懂了,要是每个程序员思路都这么清晰就好了呢。
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
/*数组a和b用于倒序装入输入的字符串S1和S2,k为每次相加时的进位,len1和len2为输入长度*/
int a[1000],b[1000],i,k,len1,len2;
char S1[1000],S2[1000];
while(scanf("%s%s",S1,S2)!=EOF)
{
memset(a,0,sizeof(a));//初始化
memset(b,0,sizeof(b));//初始化
k=0;//初始化
len1=strlen(S1);
len2=strlen(S2);
/*倒序装入*/
for(i=0;i<len1;i++)
a[i]=S1[len1-1-i]-'0';
for(i=0;i<len2;i++)
b[i]=S2[len2-1-i]-'0';
/*先从0开始相加,注意这里的技巧性哦*/
for(i=0;i<len1&&i<len2;i++)
{
a[i]=a[i]+b[i]+k;
k=a[i]/10;
a[i]=a[i]%10;
}
/*到这,有可能会有一个长一点,就让那个长的继续加就可以了*/
if(len1>len2)
{
while(i<len1)
{
a[i]=a[i]+k;
k=a[i]/10;
a[i]=a[i]%10;
i++;
}
}
if(len1<len2)
{
while(i<len2)
{
a[i]=b[i]+k;
k=a[i]/10;
a[i]=a[i]%10;
i++;
}
}
/*因为最后输出是倒序输出,因此第一个字符不能为0哦!所以就判断一下啦,如果为0就i--咯*/
if(k)
a[i]=k;
else
i--;
/*倒序输出*/
while(i>=0)
printf("%d",a[i--]);
printf("\n");
}
/*怎么样,是不是很简单呢?聪明的你学会了吗?*/
}