大整数减法
本人的主要思路:不管输入情况,先用较大的减较小的数,然后<0则向高位借位;至于符号通过设置一个int类型
的状态变量a来处理,初始设为0,因为笔者是把较大的数放在前面,较小的数放在后面,如果发生了string类对象
的交换,则a+1,输出时检测a,如果a>0则先输出负号。
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string s1,s2,s3;
int a1[201],a2[201],a3[201];
memset(a3,0,sizeof(a3));
int a=0,b=0;
cin>>s1>>s2;
if(s1.size()<s2.size())#较长的用s1存储
{
a+=1;
string temp;
temp=s1;
s1=s2;
s2=temp;
}
else
{
if(s1.size()==s2.size()&&s1[s1.size()-1]<s2[s2.size()-1])
{
string temp;
temp=s1;
s1=s2;
s2=temp;
if(a==1){}
else
{
a+=1;
}
}
}
for(int i=0;i<s1.size();i++)
{
a1[i]=s1[i]-'0';
}
for(int i=0;i<s1.size()-s2.size();i++)
{
s3.push_back('0');
}
s3+=s2;
for(int i=0;i<s3.size();i++)
{
a2[i]=s3[i]-'0';
}
for(int i=s1.size()-1;i>=0;i--)
{
a3[-i+s1.size()-1]+=a1[i]-a2[i];
}
for(int i=0;i<s1.size()-1;i++)
{
if(a3[i]<0)
{
a3[i]+=10;
a3[i+1]-=1;
}
}
for(int i=s1.size()-1;i>=0;i--)
{
if(a3[i]>0&&i>b)b+=i;
}
if(a>0)cout<<"-";
for(int i=b;i>=0;i--)
{
cout<<a3[i];
}
}