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

高精度减法

利用竖式计算的方式,注意借位和错位,还有前导0。

#include
#include
#include
#include
#include
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
        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]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<cout<return 0;
}

一步一步算法篇

你可能感兴趣的:(基础)