高精度减法求调(悬关)
  • 板块学术版
  • 楼主TripFriend1130
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/12/28 14:53
  • 上次更新2024/12/28 18:15:48
查看原帖
高精度减法求调(悬关)
1210305
TripFriend1130楼主2024/12/28 14:53

rt,不知道哪里有问题(AI改的我又看不懂。。。)
代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
class BigNum{
    public:
    int n;
    int d[1000];
    BigNum()
    {
        n = 0;
        memset(d,0,sizeof(d));
    }
    void read()
    {
        char s[1000];
        scanf("%s",s);
        n = strlen(s);
        for(int i = 0;i<n;i++)
        {
            d[i] = s[n-i-1];
        }
    }
    bool operator>=(const BigNum &b)
    {
        if(n>b.n)
        {
            return true;
        }
        else if(n==b.n)
        {
            for(int i = 0;i<n;i++)
            {
                if(d[i] > b.d[i])
                {
                    return true;
                }
                else if(d[i]<b.d[i])
                {
                    return false;
                }
            }
            return true;
        }
        else
        {
            return false;
        }
    }
    BigNum operator-(const BigNum &b)
    {
        BigNum c;
        bool f = false;
        if(*this>=b)
        {
            for(int i = 0;i<n;i++)
            {
                if(d[i]<b.d[i])
                {
                    d[i]+=10;
                    d[i+1]-=1;
                }
                c.d[i] = d[i]-b.d[i];
            }
            while(c.d[c.n-1]==0&&c.n>0)
            {
                c.n--;
            }
        }
        else
        {
            f = true;
            for(int i = 0;i<n;i++)
            {
                if(b.d[i]<d[i])
                {
                    d[i]+=10;
                    d[i+1]-=1;
                }
                c.d[i] = b.d[i]-d[i];
            }
            while(c.d[c.n-1]==0&&c.n>0)
            {
                c.n--;
            }
        }
        if (f){
            c.d[n-1] = 0-c.d[n-1];
        }
        return c;
    }
};
int main()
{
    BigNum a,b;
    a.read();
    b.read();
    BigNum c = a-b;
    for(int i = c.n-1;i>=0;i--)
    {
        cout << c.d[i];
    }
    return 0;
}
2024/12/28 14:53
加载中...