我用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;
}