高精度減法,模擬常規立豎式計算,各位數對齊,從各位開始減,如果不夠,向一位

借一作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;
}

推薦閱讀:

相关文章