高精度减法,模拟常规立竖式计算,各位数对齐,从各位开始减,如果不够,向一位
借一作10。如下图所示:
高精度减法需要注意的问题:
对两个数做比较,根据前面介绍的高精度数据输出,如果两个数长度不同,则长度较长的数作为被减数
如果两个数长度相同,从高位开始到低位,每位数字相比较,数字较大的数一定大。
高精度减法算法实现如下:
#include <iostream> #include <cstring> using namespace std; const int N =1001; int aa[N],bb[N],cc[N]; //定义计算数和输出结果 void inputNum(string ss,int a[]); //输入需要计算的数保存到数组 void printArr(int a[]); //输出数组的元素 void jisuan(int a[],int b[],int c[]); int main() { string s1 ="78345359834"; string s2 ="26245874563"; inputNum(s1,aa); printArr(aa); inputNum(s2,bb); printArr(bb); int temp =compare(aa,bb); if (temp==0) cout<<"0"<<endl; if (temp>0) jisuan(aa,bb,cc); else { cout<<"-"; jisuan(bb,aa,cc); } printArr(cc); return 0; } int compare (int a[],int b[]) { int i; if (a[0]>b[0]) return 1; if (a[0]<b[0]) return -1; for (i=a[0];i>0;i--) { if (a[i]>b[i]) return 1; if (a[i]<b[i]) return -1; } return 0; } void jisuan(int a[],int b[],int c[]) { for (int i=1;i<=a[0];i++) { if (a[i]<b[i]) { a[i+1]--; a[i]+=10; } c[i]=a[i]-b[i]; } int lenc = a[0]; while (c[lenc]==0) //求结果的长度 { lenc--; } c[0] =lenc; } void inputNum(string ss,int a[]) { int len = ss.length(); a[0] = len; for (int i=0;i<len;i++) { a[len-i] = ss[i] -48;//字符变成数字,并且倒序存储 } } void printArr(int a[]) { for (int i=a[0];i>0;i--) { cout<<a[i]; } cout<<endl; }