Python1行,C++169行
2026-06-05 18:58:15
发布于:浙江
1阅读
0回复
0点赞
Python,自带高精
print(int(input())+int(input()))
C++,编写高精度(有点过头,加减乘除和比较大小全写上了)
#include<bits/stdc++.h>
using namespace std;
class Bigint{
private:
string s;
public:
Bigint(string n){
s=n;
if(s.empty()) s="0";
else{
size_t p=s.find_first_not_of('0');
if(p!=string::npos) s=s.substr(p);
else s="0";
}
}
Bigint(long long n){
s="";
while(n){
s=char(n%10+'0')+s;
n/=10;
}
}
Bigint(){
s="0";
}
string get_s(){
return s;
}
friend ostream &operator<<(ostream &os,const Bigint &n){
os<<n.s;
return os;
}
friend istream &operator>>(istream &os,Bigint &n){
os>>n.s;
return os;
}
Bigint operator+(Bigint n);
Bigint operator-(Bigint n);
void operator++(){
*this=*this+Bigint("1");
}
bool operator<(Bigint n){
string str=n.s;
if(s.size()!=str.size()) return s.size()<str.size();
else return s<str;
}
bool operator>(Bigint n){
string str=n.s;
if(s.size()!=str.size()) return s.size()>str.size();
else return s>str;
}
bool operator<=(Bigint n){
return !(*this>n);
}
bool operator>=(Bigint n){
return !(*this<n);
}
bool operator!=(Bigint n){
return s!=n.s;
}
bool operator==(Bigint n){
return s==n.s;
}
Bigint operator*(Bigint n);
Bigint operator/(Bigint n);
Bigint operator%(Bigint n){
return *this-*this/n*n;
}
};
Bigint Bigint::operator+(Bigint n){
string s2=n.s;
string s3=s;
if(s.size()<s2.size()){
while(s3.size()<s2.size()) s3='0'+s3;
}
else if(s3.size()>s2.size()){
while(s2.size()<s3.size()) s2='0'+s2;
}
int c=0;
string str="";
for(long long i=0;i<s3.size();i++){
char i1=s2[s2.size()-i-1];
char i2=s3[s3.size()-i-1];
int i3=i1-'0';
int i4=i2-'0';
int sum=i3+i4+c;
c=sum/10;
str=char(sum%10+'0')+str;
}
if(c==1) str='1'+str;
return Bigint(str);
}
Bigint Bigint::operator*(Bigint n){
string a=s;
string b=n.s;
if (a=="0"||b=="0")
return Bigint("0");
int lena=a.size();
int lenb=b.size();
vector<int> ans(lena+lenb,0);
for(int i=lena-1;i>=0;i--){
for(int j=lenb-1;j>=0;j--){
int x=a[i]-'0';
int y=b[j]-'0';
ans[i+j+1]+=x*y;
}
}
for(int i=ans.size()-1;i>0;i--) {
ans[i-1]+=ans[i]/10;
ans[i]%=10;
}
string res="";
int idx=0;
while(idx<ans.size() -1&&ans[idx]==0) idx++;
for(;idx<ans.size(); idx++) res+=char(ans[idx]+'0');
return Bigint(res);
}
Bigint Bigint::operator-(Bigint n){
if(*this<n) return Bigint("0");
else if(*this==n) return Bigint("0");
else{
string s1=s;
string s2=n.s;
while(s1.size()<s2.size()) s1='0'+s1;
while(s2.size()<s1.size()) s2='0'+s2;
string str="";
long long n=s1.size();
int c=0;
for(long long i=0;i<n;i++){
int i1=s1[n-i-1]-'0';
int i2=s2[n-i-1]-'0';
int sum=i1-c-i2;
if(sum<0){
sum+=10;
c=1;
}
str=char(sum+'0')+str;
}
return Bigint(str);
}
}
Bigint Bigint::operator/(Bigint n) {
if(n==Bigint("0")) throw std::runtime_error("Division by zero");
if(*this<n) return Bigint("0");
string dividend=s;
string divisor=n.s;
string quotient = "";
Bigint current_remainder=Bigint("0");
for(size_t i=0;i<dividend.size();i++){
current_remainder=current_remainder*Bigint("10")+Bigint(string(1,dividend[i]));
int q=0;
while(true) {
Bigint product=n*Bigint(to_string(q+1));
if(product>current_remainder) {
break;
}
q++;
}
quotient+=char(q+'0');
current_remainder=current_remainder-(n*Bigint(to_string(q)));
}
return Bigint(quotient);
}
int main(){
Bigint a,b;
cin>>a>>b;
cout<<a+b;
return 0;
}
这里空空如也







有帮助,赞一个