#include<iostream>
#include<string>
using namespace std;
void swap(string& str1,string& str2)
{
if(str1.length()<=str2.length())
{
string tmp=str1;
str1=str2;
str2=tmp;
return ;
}else
{
return ;
}
}
//if n1>=n2 return true;else return false
bool compare(string n1,string n2)
{
if(n1.length()>n2.length())
{
return true;
}else
{
if(n1.length()<n2.length())
{
return false;
}else
{
for(int i=1;i<n1.length();i++)
{
if(n1[i]<n2[i])
{
return false;
}else
{
if(n1[i]>n2[i])
{
return true;
}else
{
continue;
}
}
}
return true;
}
}
}
string unsignedadd(string n1,string n2)
{
swap(n1,n2);
n1="0"+n1;
n2="0"+n2;
unsigned long i=n1.length();
unsigned long j=n2.length();
while(i>=1&&j>=1)
{
if((int)(n1[i]-'0')+(int)(n2[j]-'0')>=10)
{
n1[i-1]=(char)((int)n1[i-1]+1);
n1[i]=(char)((int)(n1[i]-'0')+(int)(n2[j]-'0')-10+48);
}else
{
n1[i]=n1[i]+n2[j]-'0';
}
i--;
j--;
}
if(n1[0]=='0')
{
string res;
res=n1.substr(1,n1.length()-1);
return res;
}
else
{
return n1;
}
}
string unsignedsub1(string n1,string n2)
{
if(!compare(n1,n2))
{
swap(n1,n2);
}
n1="0"+n1;
n2="0"+n2;
unsigned long i=n1.length();
unsigned long j=n2.length();
while(i>=1&&j>=1)
{
if(n1[i]<n2[j])
{
if(n1[i-1]=='0')
{
n1[i-1]='9';
}else
{
n1[i-1]=(char)((int)n1[i-1]-1);
}
n1[i]=(char)((int)(n1[i]-'0')+10-(int)(n2[j]-'0')+48);
}else
{
n1[i]=(char)(n1[i]-n2[j]+48);
}
i--;
j--;
}
string res;
int it=0;
int k=0;
while(it<1)
{
if(n1[k]=='0'&&k<n1.length())
{
k++;
}else
{
it++;
}
}
if(k==n1.length())
{
res="0";
return res;
}else
{
res=n1.substr(k,n1.length()-1);
return res;
}
}
string unsignedsub(string n1,string n2)
{
if(compare(n1,n2))
{
return unsignedsub1(n1,n2);
}else
{
string res=unsignedsub1(n1,n2);
res="-"+res;
return res;
}
}
string add(string n1,string n2)
{
if(n1[0]=='-'&&n2[0]=='-')
{
string m1=n1.substr(1,n1.length()-1);
string m2=n2.substr(1,n2.length()-1);
string res= unsignedadd(m1,m2);
res="-"+res;
return res;
}
if(n1[0]!='-'&&n2[0]!='-')
{
return unsignedadd(n1,n2);
}
if(n1[0]=='-'&&n2[0]!='-')
{
string m1=n1.substr(1,n1.length()-1);
return unsignedsub(n2,m1);
}
if(n1[0]!='-'&&n2[0]=='-')
{
string m2=n2.substr(1,n2.length()-1);
return unsignedsub(n1,m2);
}
return "";
}
string sub(string n1,string n2)
{
if(n1[0]!='-'&&n2[0]!='-')
{
return unsignedsub(n1,n2);
}
if(n1[0]=='-'&&n2[0]=='-')
{
string m1=n1.substr(1,n1.length()-1);
string m2=n2.substr(1,n2.length()-1);
return unsignedsub(m2,m1);
}
if(n1[0]=='-'&&n2[0]!='-')
{
string m1=n1.substr(1,n1.length()-1);
string res=unsignedadd(m1,n2);
res="-"+res;
return res;
}
if(n1[0]!='-'&&n2[0]=='-')
{
string m2=n2.substr(1,n2.length()-1);
return unsignedadd(n1,m2);
}
return "";
}
int main()
{
string n1="1288880908088820852085038450284502888888345";
string n2="1288884780800248520845028208422488888888345";
//cin>>n1;
//cin>>n2;
cout<<add(n1,n2)<<endl;
cout<<sub(n1,n2)<<endl;
return 0;
}
大整数加减法
最新推荐文章于 2023-04-05 15:18:51 发布