基准时间限制:
1
秒 空间限制:
131072
KB 分值:
0
难度:基础题
给出2个大整数A,B,计算A+B的结果。
Input
第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数)
Output
输出A + B
Input示例
68932147586 468711654886
Output示例
537643802472
这题不好做就是在负数上,要处理负数。例如 13 -14有可能就会计算成-99
我的做法是不看符号,把数大的放在前面统一处理,加法简单,减法注意符号
#include<iostream>
#include<algorithm>
#include<map>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
int main(){
char s1[100001],s2[100001];
scanf("%s %s",s1,s2);
int a[100001]={0},b[100001]={0},n=0,m=0;
int fz1=0,fz2=0;
if(s1[0]=='0'&&s2[0]=='0'){
cout<<0;
return 0;
}
char fz_s1[100001],fz_s2[100001];
for(int i=0;i<strlen(s1);i++){
if(s1[i]=='-'||s1[i]=='+') continue;
fz_s1[n++]=s1[i];
}
fz_s1[n]='\0';
for(int i=0;i<strlen(s2);i++){
if(s2[i]=='-'||s2[i]=='+') continue;
fz_s2[m++]=s2[i];
}
fz_s2[m]='\0';
if(strlen(fz_s1)<strlen(fz_s2)){
swap(s1,s2);
}
else if(strlen(fz_s1)==strlen(fz_s2)) {
if(strcmp(fz_s1,fz_s2)<0) swap(s1,s2);
}
if(s1[0]=='+'||s1[0]=='-') fz1=1;
if(s2[0]=='+'||s2[0]=='-') fz2=1;
n=0,m=0;
for(int i=0;i<strlen(s1);i++){
if(s1[i]=='+'||s1[i]=='-') continue;
if(fz1) a[n++]=s1[strlen(s1)-i]-'0';
else a[n++]=s1[strlen(s1)-i-1]-'0';
}
for(int i=0;i<strlen(s2);i++){
if(s2[i]=='+'||s2[i]=='-') continue;
if(fz2) b[m++]=s2[strlen(s2)-i]-'0';
else b[m++]=s2[strlen(s2)-i-1]-'0';
}
if((s1[0]=='-'&&s2[0]=='-')){
int c[100001]={0};
int fz=0;
for(int i=0;i<max(n,m);i++){
fz=a[i]+b[i]+fz;
c[i]=fz%10;
fz/=10;
}
if(fz!=0) c[max(n,m)]=fz;
int j=max(n,m)+10;
while(c[j--]==0);
j++;
cout<<'-';
for(;j>=0;j--){
cout<<c[j];
}
}
else if(s1[0]!='-'&&s2[0]!='-'){
int c[100001]={0};
int fz=0;
for(int i=0;i<max(n,m);i++){
fz=a[i]+b[i]+fz;
c[i]=fz%10;
fz/=10;
}
if(fz!=0) c[max(n,m)]=fz;
int j=max(n,m)+10;
while(c[j--]==0);
j++;
for(;j>=0;j--){
cout<<c[j];
}
}
else if(s1[0]!='-'&&s2[0]=='-'){
int i;
for( i=0;i<max(n,m);i++){
if(a[i]-b[i]>=0) a[i]=a[i]-b[i];
else a[i]=a[i]+10-b[i],a[i+1]--;
}
int j=max(n,m)+1;
int flag=1;
while(j){
if(a[j]==0){
j--;continue;
}
else break;
}
for(;j>=0;j--) cout<<a[j];
}
else if(s1[0]=='-'&&s2[0]!='-'){
int i;
cout<<'-';
for( i=0;i<max(n,m);i++){
if(a[i]-b[i]>=0) a[i]=a[i]-b[i];
else a[i]=a[i]+10-b[i],a[i+1]--;
}
int j=max(n,m)+1;
int flag=1;
while(j){
if(a[j]==0){
j--;continue;
}
else break;
}
for(;j>=0;j--) cout<<a[j];
}
return 0;
}