题意:就是给你4个大数让你加起来输出就可以了。
因为数字很大所以肯定不能直接加起来,这是我自己写的代码
#include<iostream>
#include<stdio.h>
#include<string>
#include<cstring>
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
ll n;
string s;
int a[100];
stack<int> q;
int main()
{
int T;
int maxs;
cin>>T;
while(T--) {
maxs=-1;
memset(a,0,sizeof(a));
for(int i=0;i<4;i++) {
cin>>s;
int n=s.size();
for(int i=0;i<n;i++)
{
q.push(s[i]-'0');
}
for(int i=0;i<n;i++) {
int temp=q.top();
q.pop();
a[i]+=temp;
if(a[i]>9) {
a[i]=a[i]%10;
a[i+1]+=1;
}
}
}
for(int i=99;i>=0;i--)
{
if(a[i]!=0)
{
maxs=i;
break;
}
}
if(maxs<0)
{
cout<<0<<endl;
continue;
}
for(int i=maxs;i>=0;i--) {
cout<<a[i];
}
cout<<endl;
}
return 0;
}
我把数字先用栈储存,方便倒序输出,把每一位的数字加上,如果超过9,对数字求余,在对高一位加一就可以,我看了一下用时和题解差不多。
题解代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int MAX_N=100000;
ull a[100];
int main()
{
ios::sync_with_stdio(false);
int n;
cin>>n;
while(n--){
ull ans=0;
for(int i=0;i<4;i++){
cin>>a[i];
ans+=a[i];
}
if(a[1]==4611686018427387904&&a[2]==4611686018427387904&&a[3]==4611686018427387904&&a[0]==4611686018427387904)
cout<<"18446744073709551616"<<endl;
else
cout<<ans<<endl;
}
return 0;
}
个结果很明显,每个数字的数据上限是262次方,四个的话就是264次方
unsigned long long 的数据范围是2^64-1,没有包括最极端的情况,所以需要特判一下,要特别记一下。