1. 程式人生 > >高精度減法——一步一步演算法篇

高精度減法——一步一步演算法篇

高精度減法

利用豎式計算的方式,注意借位和錯位,還有前導0。

#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int main()
{
    int a[256],b[256],c[256],lena,lenb,lenc,i;
    char n[256],n1[256],n2[256];
    memset(a,0,sizeof(a));
    memset(b,0
,sizeof(b)); memset(c,0,sizeof(c)); gets(n1); //輸入被減數 gets(n2); //輸入減數 if (strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0)) { //strcmp()為字串比較函式,如果n1==n2,返回0 //如果n1>n2,返回正整數,如果n1<n2,返回負整數 strcpy(n,n1); //判斷被減數和減數的大小,交換減數和被減數
strcpy(n1,n2); strcpy(n2,n); cout<<"-"; //交換之後的資料,結果為負數 } lena=strlen(n1);lenb=strlen(n2); for (i=0;i<=lena-1;i++) a[lena-i]=n1[i]-'0'; //被減數放入a陣列 for (i=0;i<=lenb-1;i++) b[lenb-i]=n2[i]-'0'; //減數放入b陣列 i=1; while (i<=lena) { if
(a[i]<b[i]) { a[i]+=10; //不夠減借位 a[i+1]--; //上一位減一 } c[i]=a[i]-b[i]; //對應位相減 i++; } lenc=i; for (i=lenc;i>=1;i--) if ((c[i]==0)&&(lenc>1)) lenc--;else break; //刪除前導“0” for (i=lenc;i>=1;i--) cout<<c[i]; cout<<endl; return 0; }

一步一步演算法篇