高精度减法——一步一步算法篇

来源:互联网 发布:cnas 软件测试实验室 编辑:程序博客网 时间:2024/06/05 14:25

高精度减法

利用竖式计算的方式,注意借位和错位,还有前导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;}

一步一步算法篇

2 0