我虽然用Python过了,但还是想问一下,C++做为什么2 7 8 10 点超时了 我还是用结构体做的 省了一些时间 求优化
#include <bits/stdc++.h>
using namespace std;
struct highoperation
{
string a;
string b;
void tos(string &a,string &b)
{
if(a.length()<b.length())
{
while(a.length()<b.length())
{
a="0"+a;
}
}
else
{
while(b.length()<a.length())
{
b="0"+b;
}
}
}
void delete_zero(string &a)
{
while(a[0]=='0')
{
if(a=="0")
{
return;
}
a.erase(0,1);
}
}
char toc(int i)
{
return i+'0';
}
int toi(char c)
{
return c-'0';
}
int lar(string a,string b)
{
tos(a,b);
if(a==b)
{
return 0;
}
if(a[0]>b[0])
{
return 1;
}
if(a[0]<b[0])
{
return -1;
}
a.erase(0,1);
b.erase(0,1);
return lar(a,b);
}
string add(string a,string b)
{
if(a[0]=='-'&&b[0]=='-')
{
a.erase(0,1);
b.erase(0,1);
return "-"+add(a,b);
}
if(a[0]=='-'&&b[0]!='-')
{
a.erase(0,1);
return mis(b,a);
}
if(a[0]!='-'&&b[0]=='-')
{
a.erase(0,1);
return mis(b,a);
}
tos(a,b);
int l=a.length();
bool flag=0;
for(int i=l-1;i>=0;i--)
{
int d1=toi(a[i]);
int d2=toi(b[i]);
int d3=d1+d2;
if(d3>=10)
{
d3-=10;
if(i)
{
a[i-1]++;
}
else
{
flag=1;
}
}
a[i]=(toc(d3));
}
return flag?("1"+a):a;
}
string mis(string a,string b)
{
if(a[0]=='-'&&b[0]=='-')
{
a.erase(0,1);
b.erase(0,1);
return mis(b,a);
}
if(a[0]!='-'&&b[0]=='-')
{
b.erase(0,1);
return add(a,b);
}
if(a[0]=='-'&&b[0]!='-')
{
a.erase(0,1);
return "-"+add(a,b);
}
tos(a,b);
int l=a.length();
if(lar(b,a)>0)
{
return "-"+mis(b,a);
}
for(int i=l-1;i>=0;i--)
{
int d1=toi(a[i]);
int d2=toi(b[i]);
int d3=d1-d2;
if(d3<0)
{
d3+=10;
int j=i;
bool flag=true;
for(j=i;toi(a[j])==0;j--)
{
a[j]='9';
flag=false;
}
a[j-flag]--;
}
a[i]=(toc(d3));
}
delete_zero(a);
if(a=="")
{
return "0";
}
return a;
}
string mul(string a,string b)
{
int l=a.length(),l1=b.length();
string ans="0";
for(int i=l-1;i>=0;i--)
{
int d=toi(a[i]);
string sum=b;
for(int j=1;j<d;j++)
{
sum=add(sum,b);
}
if(d)
{
ans=add(ans,sum);
}
b+="0";
}
return ans;
}
string mo;
string hchu(string a,string b)
{
string ans="0";
while(lar(a,b)>=0)//高精除(模)高精的思路
{
a=mis(a,b);
ans=add(ans,"1");
}
mo=a;
return ans;
}
};
int main()
{
highoperation p;
cin>>p.a;
cin>>p.b;
cout<<p.add(p.a,p.b)<<"\n";
cout<<p.mis(p.a,p.b)<<"\n";
cout<<p.mul(p.a,p.b)<<"\n";
cout<<p.hchu(p.a,p.b)<<"\n";
cout<<p.mo;
return 0;
}