给出2个大整数A,B,计算A+B的结果。
Input
第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数)
Output
输出A + B
Input示例
68932147586 468711654886
Output示例
537643802472
累&泪
#include<stdio.h>
#include<string.h>
#include<stack>
#include<algorithm>
using namespace std;
char a[10000 +5],b[10000 +5];
stack<int> s;
int main()
{
int lena,lenb,i,max,temp,c,x,y,sum;bool za,zb,cmp,flag,ZORE,gg;
while(scanf("%s%s",a,b)!=EOF)
{
gg=false;
lena=strlen(a),lenb=strlen(b);
za=a[0]=='-',zb=b[0]=='-';//记下正负
max=lena-za>lenb-zb?lena-za:lenb-zb;//记下 长数长度
//判断答案正负 flag记下答案正负 cmp记下比较a b绝对值大小
if(za^zb)//判断是否异号
{
if (lena-za>lenb-zb)
cmp=true;
else if(lena-za<lenb-zb)
cmp=false;
else
{
int t=strcmp(a+za,b+zb);
if(t==0)
gg=true;
cmp=t>0?1:0;
}
if(!za&&cmp||!zb&&!cmp) flag=true;
else flag=false;
}else if(za&&zb) flag=false;
else flag=true;
if(a[za]=='0'&&b[za]=='0') gg=true;
if(gg)
printf("0\n");
else
{
int k;c=0;
for(k=1;k<=max;k++)
{
x=lena-k>=0&&a[lena-k]!='-'?a[lena-k]-'0':0;
y=lenb-k>=0&&b[lenb-k]!='-'?b[lenb-k]-'0':0;
if(!(za^zb))//同号 做加法
s.push((x+y+c)%10),c=(x+y+c)/10;
else
{//异号 做减法 用绝对值大的减 绝对值小的
int sum;
if(cmp) sum=x-y+c;
else sum=y-x+c;
if(sum<0) sum+=10,c=-1;
else c=0;
s.push(sum);
}
}if(c==1||c==-1)s.push(1);
if(!flag) printf("-");
ZORE=true;
while(s.size())
{
if(ZORE) //过滤首位灵
if(s.top()==0)
{
s.pop();
continue;
}
else
ZORE=false;
printf("%d",s.top());
s.pop();
}
printf("\n");
}
}
return 0;
}