zoukankan      html  css  js  c++  java
  • 高精度减法

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    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));
        scanf("%s",n1);
        scanf("%s",n2);
        if(strlen(n1)<strlen(n2)||strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0)
        {
            strcpy(n,n1);//复制与转换 
            strcpy(n2,n);
            strcpy(n2,n);
            cout<<"-";//减法特有性质,如果被减数小于减数,那么先把他们倒过来算,最后在加一个负号 
        }
        lena=strlen(n1);lenb=strlen(n2);//确定位数 
        for(i=0;i<=lena-1;i++)a[lena-i]=int(n1[i]-48);////利用ascll码性质,0的ascll码为48.减去零就是ascll减去48,成功将字符转化为数字
        for(i=0;i<=lenb-1;i++)b[lenb-i]=int(n2[i]-48);//同上 
        while(i<=lena||i<=lenb)
        {
            if(a[i]<b[i])
            {
                a[i]+=10;
                a[i+1]--;//对应位相减 
            }
            c[i]=a[i]-b[i];//对应位相减得到对应的c 
            i++;//继续下一位 
            }
        lenc=i;
        while(c[lenc]==0&&lenc>1)//如果最高为上为零,lenc减一,消去
        lenc--;
        for(i=lenc;i>=1;i--)//此for用来一位一位倒序输出
        cout<<c[i];
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    poj2886 Who Gets the Most Candies?
    poj1201 Intervals
    poj3109 Inner Vertices
    poj1990 MooFest
    poj3368 Frequent values
    NOIP练习赛题目6
    NOIP练习赛题目5
    NOIP练习赛题目4
    NOIP练习赛题目3
    NOIP练习赛题目2
  • 原文地址:https://www.cnblogs.com/lbssxz/p/10464489.html
Copyright © 2011-2022 走看看