思路:判断输入的被减数和减数的大小,如果被减数小于减数,就输出负号,其余按大数减小数
大数减小数;
倒序,将大数与小数都补到相同的位数相减,如果单个字符相减小于0,则当前相减等于他们之差加上10,,下一个字符相减就退一位。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string s1,s2;
int t,i, x[200];
bool flag;
while(cin>>s1>>s2)
{
t=0;
if(s1.size()<s2.size())
{
swap(s1,s2);
cout<<"-"; }
if(s1.size()==s2.size())
{
if(s1.compare(s2)<0)
{
swap(s1,s2);
cout<<"-";
}
if(s1.compare(s2)==0)
{
cout<<"0";
}
}
flag=false;
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
if (s1.size() >= s2.size())
{ s2.resize(s1.size(), '0'); }
else
{ s1.resize(s2.size(),'0' ); }
for(i=0;i<s2.size();i++)
{
x[i]=(s1[i]-s2[i]-t);
if(x[i]<0)
{
t=1;
x[i]=x[i]+10;}
else
{
t=0;}
}
for(i=s2.size()-1;i>=0;i--)
{
if(x[i]==0&&flag) {
cout<<x[i];}
else if(x[i]!=0) {
flag=true;cout<<x[i];}
}
cout<<endl;
}
return 0;
}