#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
string operator + (string s1,string s2)//大数相加
{
if(s1.size()<s2.size())
{
string temp=s1;
s1=s2;
s2=temp;
}
for(int i=(int)s1.size()-1,j=(int)s2.size()-1;i>=0;i--,j--)
{
s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));
if(s1[i]-'0'>=10)
{
s1[i]=char((s1[i]-'0')%10+'0');//注意细节,括号一定要加
if(i) s1[i-1]++;
else s1='1'+s1;
}
}
return s1;
}
string operator - (string s1,string s2)
{
if(s1.size()<s2.size()||(s1.size()==s2.size()&&s1[0]<s2[0]))
{
string temp=s1;
s1=s2;
s2=temp;
}
for(int i=(int)s1.size()-1,j=(int)s2.size()-1;i>=0;i--,j--)
{
s1[i]=char(s1[i]-(j>=0?s2[j]-'0':0));
if(s1[i]-'0'<0)
{
if(i) s1[i]=char(s1[i]-'0'+10+'0');
if(i) s1[i-1]--;
else s1='-'+s1;
}
}
return s1;
}
string operator * (string s,int x)//大数乘一个整数
{
reverse(s.begin(),s.end());
int cmp=0;
for(int i=0;i<s.size();i++)
{
cmp=(s[i]-'0')*x+cmp;
s[i]=(cmp%10+'0');
cmp/=10;
}
while(cmp)
{
s+=(cmp%10+'0');
cmp/=10;
}
reverse(s.begin(),s.end());
return s;
}
string operator / (string s,int x)//大数除一个整数
{
int cmp=0;
bool ok=false;
string ans="";
for(int i=0;i<s.size();i++)
{
cmp=cmp*10+(s[i]-'0');
if(cmp>=x)
{
ok=true;
ans+=(cmp/x+'0');
cmp=cmp%x;
}
else{
if(ok)
ans+='0';
}
}
return ans;
}
string operator * (string x,string y)//大数乘大数
{
string ans;
for(int i=(int)y.size()-1,j=0;i>=0;i--,j++)
{
string tmp=x*(y[i]-'0');
for(int k=0;k<j;k++)
tmp+='0';
ans=ans+tmp;
}
return ans;
}
高精度模版(大数相加 相乘 相除)
最新推荐文章于 2023-01-07 01:45:26 发布