题解 | Integer Inquiry
#include <bits/stdc++.h>
using namespace std;
const int LEN=10000;
struct BigInteger{
int digit[LEN];
int length;
BigInteger(string s){
length=s.size();
for(int i=0;i<length;i++){
digit[i]=s[length-i-1]-'0';
}
}
BigInteger operator+(BigInteger b){
BigInteger ans("");
int carry=0;
for(int i=0;i<length||i<b.length;i++){
int current=digit[i]+b.digit[i]+carry;
carry=current/10;
ans.digit[ans.length++]=current%10;
}
if(carry!=0){
ans.digit[ans.length++]=carry;
}
return ans;
}
void print(){
for(int i=length-1;i>=0;i--){
cout<<digit[i];
}cout<<endl;
}
};
int main(){
string s;int flag=0;
BigInteger a("");
while(cin>>s){
if(flag!=0&&s=="0")break;
flag++;
a=a+BigInteger(s);
}
a.print();
}
#include <bits/stdc++.h>
using namespace std;
const int LEN=10000;
struct BigInteger{
int digit[LEN];
int length;
BigInteger(string s){
length=s.size();
for(int i=0;i<length;i++){
digit[i]=s[length-i-1]-'0';
}
}
BigInteger operator+(BigInteger b){
BigInteger ans("");
int carry=0;
for(int i=0;i<length||i<b.length;i++){
int current=digit[i]+b.digit[i]+carry;
carry=current/10;
ans.digit[ans.length++]=current%10;
}
if(carry!=0){
ans.digit[ans.length++]=carry;
}
return ans;
}
void print(){
for(int i=length-1;i>=0;i--){
cout<<digit[i];
}cout<<endl;
}
};
int main(){
string s;int flag=0;
BigInteger a("");
while(cin>>s){
if(s=="0"){
a=a;
}else a=a+BigInteger(s);
}
a.print();
}
这个数据的前导0应该只有一个,所以直接这么跳了,其他就是单纯的大数加法,方法2就是直接跳过0,所有的0都不算,不知道为什么加0会出现错误
查看6道真题和解析