题目1198:a+b
时间限制:1 秒
内存限制:32 兆
特殊判题:否
-
题目描述:
-
实现一个加法器,使其能够输出a+b的值。
-
输入:
-
输入包括两个数a和b,其中a和b的位数不超过1000位。
-
输出:
-
可能有多组测试数据,对于每组数据,
输出a+b的值。
-
样例输入:
-
2 6 10000000000000000000 10000000000000000000000000000000
-
样例输出:
-
8 10000000000010000000000000000000
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char a[1012]={0};
char b[1012]={0};
char c[1012]={0};
int main()
{
while(scanf("%s%s",a,b)!=EOF)//输入a,b
{
int len1=strlen(a),len2=strlen(b);//字符串反转且字符串变数字
int len=len1>len2?len1:len2;//len为计算结果的位数
int carry=0;//进位
int i=len1-1,j=len2-1,k=len-1;
for(;i>=0 && j>=0;i--,j--,k--)
{
int tmp=a[i]-'0'+b[j]-'0'+carry;//计算两个整数当前位以及来自低位的进位和
carry=tmp/10;//得到进位
tmp%=10;//得到末位
c[k]=tmp;
}
while(j>=0)//处理b剩余高位
{
int tmp=b[j--]-'0'+carry;
carry=tmp/10;
tmp=tmp%10;
c[k--]=tmp;
}
while(i>=0)//处理a剩余高位
{
int tmp=a[i--]-'0'+carry;
carry=tmp/10;
tmp=tmp%10;
c[k--]=tmp;
}
if(carry!=0)//计算结束后若最高位有进位则输出1
printf("1");
for(i=0;i<len;++i)
printf("%d",c[i]);//输出结果
printf("\n");//输出换行
}
return 0;
}
/**************************************************************
Problem: 1198
User: zpy
Language: C++
Result: Accepted
Time:120 ms
Memory:1024 kb
****************************************************************/