Description
输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
Input
输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。
Output
输出一行,表示a + b的值。
Sample Input
20100122201001221234567890
2010012220100122
2010012220100122
Sample Output
20100122203011233454668012
思路如下:
第一种是采用数学的思想,去计算,好理解一些。
第二种,就是采用后面进位的方式,直接加。
第二种代码如下:
#include<stdio.h>
#include<string.h>
#define MAXa 100
#define MAXb 100
#define MAXc 105
int main()
{
char a[MAXa],b[MAXb];
int i,j,c[MAXc],t,la,lb,n=0;
int r=0;
scanf("%s%s",a,b);
memset(c,0,sizeof(c));
la=strlen(a);
lb=strlen(b);
for(i=la-1,j=lb-1; i>=0&&j>=0; i--,j--)
{
t=(a[i]-'0')+(b[j]-'0')+r;
c[n++]=t%10;
r=t/10;
}
if(la<lb) for(; j>=0; j--)
{
t=b[j]-'0'+r;
c[n++]=t%10;
r=t/10;
}
else if(la>lb) for(; i>=0; i--)
{
t=a[i]-'0'+r;
c[n++]=t%10;
r=t/10;
}
else c[n++]=r;
for(i=MAXc-1; i>=0; i--)
if(c[i])
break;
for(j=i; j>=0; j--)
printf("%d",c[j]);
printf("\n");
return 0;
}
第一种代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char a[105],b[105];
int x[105],y[105],z[105];
int len,len1,i,j,t;
while(scanf("%s%s",&a,&b)!=EOF)
{
len=strlen(a);
len1=strlen(b);
if(len>len1)
j=len;
else
j=len1;
for(i=0;i<j;i++)
x[i]=y[i]=z[i]=0;
t=j-1;
for(i=len-1;i>=0;i--,t--)
x[t]=a[i]-'0';
t=j-1;
for(i=len1-1;i>=0;i--,t--)
y[t]=b[i]-'0';
for(i=0;i<j;i++)
z[i]=x[i]+y[i];
for(i=j-1;i>0;i--)
{
if(z[i]>=10)
{
z[i]=z[i]-10;
z[i-1]++;
}
}
for(i=0;i<j;i++)
printf("%d",z[i]);
printf("\n");
}
return 0;
}