主页 | 论坛 | 题库 | 名次 | 状态 | 统计 |
题目 B: a+b
时间限制: 1 Sec 内存限制: 128 MB提交: 31 解决: 7
[ 提交][ 状态][ 论坛]
题目描述
a+b
输入
一个 m 代表多少组数据
每组两个数a b,空格隔开,每个数小于1000位
输出
a+b的和。。并换行。
样例输入
5
123456 123456
654321 654321
987654321123456789 987654321123456789
1111111111111111111111111111111111111122222222222222222222222222222223333333333333333333339999999999999999999999999999999998888888888888888888888887777777777777777777777777777777
111111111 111111111111
样例输出
246912
1308642
1975308642246913578
121111111111111111111111111111111110001111111111111111111110000000000111111111111111111110
111222222222
提示;注意数是比较大的,不能用寻常的思路去做,字符串容纳的位数比较大,可以尝试字符串来做这道题。
#include<stdio.h>
#include<string.h>
int
main()
{
int
i,n,q,w,t,j;
char
a[1000],b[1000];//用字符串a b来记录输进的数。
scanf
(
"%d"
,&n);
while
(n--)
{
int
c[1000]={0},d[1000]={0},e[1000]={0};//因为字符串加减麻烦,因此用数组来讲字符串反过记录,
scanf
(
"%s %s"
,a,b);
q=
strlen
(a);//测试字符串的长度。
w=
strlen
(b);
if
(q>w)
t=q;
else
t=w;//找出字符串长度最长的位数。
for
(i=0;i<q;i++)
c[q-i-1]=a[i]-
'0'
;
for
(i=0;i<w;i++)
d[w-1-i]=b[i]-
'0'
;//字符转化成数字。
for
(i=0;i<t;i++)
{
e[i]=c[i]+d[i]+e[i];//将数加起来。
if
(e[i]>=10)
{e[i]=e[i]-10;
e[i+1]=1;}//进位。
}q=0;
for
(i=t;i>=0;i--)
{
if
(e[i]!=0)//判断是否数的最高位是否为0;
{
q++;
for
(j=i;j>=0;j--)
printf
(
"%d"
,e[j]);
break
;
}
}
if
(q==0)
printf
(
"0"
);//排除0000+00000;
printf
(
"\n"
);
}
return
0;
}
/**************************************************************
Problem: 1521
User: 141210145
Language: C
Result: 正确
Time:0 ms
Memory:968 kb
****************************************************************/