救救孩子,为什么本地跑得都是对的但是传上去就错了嘤
查看原帖
救救孩子,为什么本地跑得都是对的但是传上去就错了嘤
675044
TsrmKumo楼主2022/2/2 22:30

我用python写的直接就过了,下面这个代码本地跑出来跟python一样可是后两个就一直WA啊啊啊

btw代码似乎写得有点长?大佬们不要喷我

#include <iostream>

using namespace std;

struct HAint {
    int length;
    short* number;
};

HAint init_HA(string s) {
    int l = s.length();
    short* data = new short[l];
    for (int i = 0; i < l; i++) data[i] = s[l - i - 1] - '0';
    HAint intgr = { l, data };
    return intgr;
}

string toString(HAint intgr) {
    int l = intgr.length;
    char* c = new char[l];
    for (int i = 0; i < l; i++) c[l - i - 1] = char('0' + intgr.number[i]);
    return string(c);
}

string toString(int intgr) {
    int l = 1;
    int intgr_copy = intgr;
    while ((intgr_copy /= 10) != 0) l++;
    char* c = new char[l];
    for (int i = l - 1; i >= 0; intgr /= 10) c[i--] = char('0' + intgr % 10);
    return string(c);
}

HAint add_HA(HAint intgr1, HAint intgr2) {
    int l = max(intgr1.length, intgr2.length) + 1;
    short* data = new short[l];
    for (int i = 0; i < l; i++) data[i] = 0;
    for (int i = 0; i < l - 1; i++) {
        data[i] += intgr1.number[i] + intgr2.number[i];
        if (data[i] >= 10) data[i] -= 10, data[i + 1] += 1;
    }
    HAint intgr = { l, data };
    if (data[intgr.length - 1] == 0) intgr.length--;
    return intgr;
}

HAint mul_HA(HAint intgr1, HAint intgr2) {
    int l = intgr1.length + intgr2.length;
    short* data = new short[l];
    for (int i = 0; i < l; i++) data[i] = 0;
    int loc;
    for (int i = 0; i < intgr1.length; i++)
        for (int j = 0; j < intgr2.length; j++) {
            loc = i + j;
            data[loc] += intgr1.number[i] * intgr2.number[j];
            while (data[loc] >= 10) {
                data[loc + 1] += data[loc] / 10;
                data[loc++] %= 10;
            }
        }
    HAint intgr = { l, data };
    if (data[intgr.length - 1] == 0) intgr.length--;
    return intgr;
}

int main() {
    int n;
    cin >> n;
    HAint sum = init_HA("0");
    HAint fac = init_HA("1");
    for (int i = 1; i <= n; i++) {
        fac = mul_HA(fac, init_HA(toString(i)));
        sum = add_HA(sum, fac);
    }
    cout << toString(sum) << endl;
    return 0;
}

2022/2/2 22:30
加载中...