资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
任意输入两个正整数a,b,求两数之和。(注:本题会输入超过32位整数限制的大整数)
样例输入
4611686018427387903 4611686018427387903
样例输出
9223372036854775806
数据规模和约定
1=<a,b<=4611686018427387903
注:题目来自蓝桥杯官网
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int h[33];
int main(){
string j,jj;//用两个字符串存储加数
cin>>j>>jj;
int l=j.length(),ll=jj.length();
//逆置两个加数字符串
reverse(j.begin(),j.end());
reverse(jj.begin(),jj.end());
if(l<ll)//把较长的一个加数赋值给和数组
for(int i=0;i<ll;i++)
h[i]=jj[i]-'0';
else
for(int i=0;i<l;i++)
h[i]=j[i]-'0';
int jw=0;//进位
for(int i=0;i<l&&i<ll;i++){//模拟从个位开始求和,并用jw来存储是否有进位
h[i]=(j[i]-'0')+(jj[i]-'0')+jw;
if(h[i]>=10){
jw=1;
h[i]%=10;
}
else
jw=0;
}
for(int i=33;i>=0;i--){//按照题目要求,逆序从和数组的第一个非零位开始输出两个加数的和
if(h[i]){
int f=i;
for(int j=f;j>=0;j--)
cout<<h[j];
break;
}
}
cout<<endl;
return 0;
}