关于 第一个测试点 输出过长
查看原帖
关于 第一个测试点 输出过长
649815
Gmor_cerr楼主2022/12/18 15:37

RT 求助万能谷民

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
struct BigNum
{
    int len, s[9999];
    BigNum()
    {
        memset(s, 0, sizeof(s));
        len = 1;
    }
    BigNum operator = (const char* num)
    {
        len = strlen(num);
        for (int i = 0; i < len; ++i)
            s[i] = num[len-i-1] - '0';
        return *this;
    }
    BigNum operator = (const int num)
    {
        char a[9999];
        sprintf(a, "%d", num);
        *this = a;
        return *this;
    }
    BigNum (const int num)
    {
        *this = num;
    }
    BigNum (const char* num)
    {
        *this = num;
    }
    BigNum operator * (const BigNum &x)
    {
        BigNum c;
        c.len = len + x.len;
        for (int i = 0; i < len; ++i)
            for (int j = 0; j < x.len; ++j)
            {
                c.s[i+j] += s[i] * x.s[j];
                c.s[i+j+1] += c.s[i+j] / 10;
                c.s[i+j] %= 10;
            }
        if(c.s[c.len-1] == 0)
            --c.len;
        return c;
    }
};
ostream& operator << (ostream &out, const BigNum &x) 
{
    for (int i = x.len - 1; i >= 0; --i)
        cout << x.s[i];
    return out;
}
istream& operator >> (istream &in, BigNum &x)
{
    char num[9999];
    in >> num;
    x = num;
    return in;
}
int main()
{
    BigNum a, b, c;
    cin >> a >> b;
    if (a.s[0] == '0' || b.s[0] == '0') {
    	cout << "0";
    	return 0;
    }
    cout << a * b;
    return 0;
}
2022/12/18 15:37
加载中...