解题思路:
1.此题为大整数减法,同样是高精度运算,并且利用数组模拟,与大整数加法略有不同的是,里面的进位处理是相减
2.同样的思路,将字符串a和b都存入到整形数组中,注意从字符串的最高位开始存入到数组的最低位中
3.减法模拟中,同样创建三个数组,存放被减数,减数和差,在最后对差进行进位处理,如果差数组的位置编号的元素值是负数,那么说明需要前一位减1,本位上加10;
4.最后利用打标记的方法,输出结果
5.同样,对0要进行特判
#include<bits/stdc++.h>
using namespace std;
int A[505],B[505],C[505];//分别存放被减数,减数和差
int main()
{
string a,b;
cin>>a>>b;//输入字符串被减数和减数
int lena=a.length(),lenb=b.length();//计算两个数的长度
int j=0;
for(int i=a.length()-1;i>=0;i--)
{
j++;
A[j]=a[i]-48;
}//将被减数倒序存入数组A中
j=0;
for(int i=b.length()-1;i>=0;i--)
{
j++;
B[j]=b[i]-48;
}//将减数倒序存入数组B中
for(int i=1;i<=505;i++)
{
C[i]=C[i]+A[i]-B[i];//模拟个位减去个位
if(C[i]<0)//如果该位置为负数
{
C[i+1]=C[i+1]-1;//前一位借1
C[i]=C[i]+10;//该位置加10
}
else
continue;
}
j=505,C[0]=1;
while(C[j]==0)
j--;//去除前导0
for(int i=j;i>=1;i--)
cout<<C[i];
if(j==0)//做特殊判断,如果结果是0的话
cout<<0; //输出0
return 0;
}