地址:http://acm.swust.edu.cn/problem/434
这个题主要是运用字符数组,从两个数组的最后一位进行相加,和如果大于9就要向前进位,所以除了要输入的两个数组外还要有一个存储和的数组,且这个数组的大小要大于输入的最大的数组。
#include<stdio.h>
#include<string.h>
char
str3[3001];
int
main()
{
int
len1,len2;
while
(
scanf
(
"%d%d"
,&len1,&len2)!=EOF)
{
getchar
();
memset
(str3,48,
sizeof
(str3));
char
str1[3001],str2[3001];
int
i,j,sum,max,min,flag;
for
(i=0;i<len1;i++)
{
if
(i==0)
scanf
(
"%c"
,&str1[i]);
else
scanf
(
" %c"
,&str1[i]);
}
getchar
();
for
(i=0;i<len2;i++)
{
if
(i==0)
scanf
(
"%c"
,&str2[i]);
else
scanf
(
" %c"
,&str2[i]);
}
max=len1>len2?len1:len2;
min=len1>len2?len2:len1;
for
(i=max-1,j=min-1;i>=0;i--,j--)
{
if
(j>=0)
{
if
(max==len1)
sum=str1[i]+str2[j]+str3[i+1]-3*
'0'
;
else
sum=str2[i]+str1[j]+str3[i+1]-3*
'0'
;
}
if
(j<0)
{
if
(max==len1)
sum=str1[i]+str3[i+1]-2*
'0'
;
else
sum=str2[i]+str3[i+1]-2*
'0'
;
}
if
(sum<=9)
str3[i+1]=sum+
'0'
;
if
(sum>9)
{
str3[i+1]=sum%10+
'0'
;
flag=sum/10;
str3[i]=flag+
'0'
;
}
}
str3[max+1]=
'\0'
;
int
t;
for
(i=0;i<=max;i++)
{
if
(str3[i]!=
'0'
)
{
t=i;
break
;
}
}
for
(i=t;i<=max;i++)
printf
(
"%c"
,str3[i]);
printf
(
"\n"
);
}
return
0;
}