自古码农出少年,年年都有“A+B”
自古码农出少年,年年都有“A+B”
自古码农出少年,年年都有“A+B”
问题描述
输入A、B,输出A+B。
输入格式
输入的第一行包括两个整数,由空格分隔,分别表示A、B。
输出格式
输出一行,包括一个整数,表示A+B的值。
说明:“输出格式”是要求你的程序在输出结果的时候必须满足的格式。
样例输入
12 45
样例输出
57
数据规模与约定
-10000 <= A, B <= 10000。
基础版
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << a + b;
return 0;
}
进阶版
可以处理两个3000位数的加法
#include <stdio.h>
#include <string.h>
int main()
{
int i,l1,l2,s,max,min,h;
char a[3000],b[3000],c[3000];
while(scanf("%s%s",a,b)!=-1)
{
l1=strlen(a);
l2=strlen(b);
if(l1>=l2)//处理b,把b第一个字符之前填充'0'字符,直至与a等长,方便a与b对齐相加。
{
max=l1;min=l2;
h=max-min;
for(i=0;i<min;i++)
c[i+h]=b[i];//c为临时数组
for(i=0;i<h;i++)
c[i]='0';
for(i=0;i<max;i++)
b[i]=c[i];
}
if(l1<l2)//处理a,把a第一个字符之前填充'0'字符,直至与b等长,方便a与b对齐相加。
{
max=l2;min=l1;
h=max-min;
for(i=0;i<min;i++)
c[i+h]=a[i];//c为临时数组
for(i=0;i<h;i++)
c[i]='0';
for(i=0;i<max;i++)
a[i]=c[i];
}//现在已经将短的那个字符串在前面加了一些'0'字符,将其转换为了一个与长的那个字符串等长的字符串,方便a与b对齐相加。
int t[5000]={0};
int d[5000]={0};
for(i=max-1;i>=0;i--)
{
if(i>=1)
{
s=a[i]-'0'+b[i]-'0'+t[i];
if(s<=9)
d[i]=s;
if(s>=10)
{
d[i]=s-10;
t[i-1]=1;
}
}
if(i==0)
{
s=a[0]-'0'+b[0]-'0';
d[0]=s+t[0];
}
}
for(i=0;i<max;i++)
printf("%d",d[i]);
printf("\n");
}
return 0;
}