请先看高精度加法,再理解本文会更好(本文是在高精度加法基础之上写的)
第一步:设两个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; }