题解 | 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会出现错误