请先看高精度加法,再理解本文会更好(本文是在高精度加法基础之上写的)
第一步:设两个char数组,求出两者长度的最大值。
第二步:设flag(进行符号的判定)为正。
第三步:设两个int数组,进行倒序转化。(正和负的倒序转化是不一样的,请看代码)
第四步:两者相减,如果不够就借位。
第五步:进行输出的判断。
第六步:先判断符号的正负,再进行减零操作(比如1234-1234,如果没有这一步的话,会输出四个零),后进行倒序输出。(具体看代码即可)
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
int main ()
{
char a[100000]; //第一步
char b[100000];
cin >> a >> b;
int len1=strlen(a);
int len2=strlen(b);
int len=max(len1,len2);
int aa[100000];
int bb[100000];
//第二步
int flag = 1; //1为正,0为负;
if( len1<len2 || (len1==len2 && strcmp(a,b)<0) ) // 第三步(len1==len2,切记是两个等号,不然就慢慢找错吧)
{
flag=0;
for (int i=0;i<len2;i++) aa[i]=b[len2-1-i]-'0';
for (int i=0;i<len1;i++) bb[i]=a[len1-1-i]-'0';
}
else
{
for (int i=0;i<len1;i++) aa[i]=a[len1-1-i]-'0';
for (int i=0;i<len2;i++) bb[i]=b[len2-1-i]-'0';
}
for (int i=0;i<len;i++) //第四步
{
aa[i]=aa[i]-bb[i];
if(aa[i]<0)
{
aa[i]=aa[i]+10;
aa[i+1]--;
}
}
while(a[len-1]==0 && len>1) //第五步(如果最后减为零,可不能连最后一个零也不输出,所以len>1是很关键的。
{
len--;
}
if(flag==0) cout << "-" ; //第六步
while (aa[len-1]==0 && len>1)
{
len--;
}
for (int i=len-1;i>=0;i--)
{
cout << aa[i];
}
cout << endl;
return 0;
}



京公网安备 11010502036488号