控制台(Terminal):
-----------------------------------------------
执行时间:5115.509 ms
最大内存使用:5852 KB
程序返回值:3221225725 (0xC00000FD)
-----------------------------------------------
请按任意键继续. . .
系统:Windows
代码:
#include <bits/stdc++.h>
// #include "../bigint.hpp"
using namespace std;
#define LL long long
#define Pii pair<int, int>
#define ULL unsigned long long
namespace gdb7
{
struct bigint {
int num[1000010];
bigint() {
memset(num, 0, sizeof(num));
}
bigint(int n) {
memset(num, 0, sizeof(num));
num[0] = 1;
num[1] = n;
}
bigint operator-(const bigint &b) const {
bigint tmp(*this);
for (int i = 1; i <= tmp.num[0]; ++i) {
if (tmp.num[i] >= b.num[i]) {
tmp.num[i] -= b.num[i];
} else {
tmp.num[i] += 10;
tmp.num[i + 1] -= 1;
tmp.num[i] -= b.num[i];
}
}
return *this;
}
bigint operator*(const bigint &b) const {
bigint tmp(*this);
for (int i = 1; i <= tmp.num[0]; ++i) {
for (int j = 1; j <= b.num[0]; ++j) {
tmp.num[i + j - 1] += tmp.num[i] * b.num[j];
tmp.num[i + j] += tmp.num[i + j - 1] / 10;
tmp.num[i + j - 1] %= 10;
}
}
while (tmp.num[tmp.num[0] + 1]) {
++tmp.num[0];
}
while (tmp.num[tmp.num[0]] == 0 && tmp.num[0] > 1) {
--tmp.num[0];
}
return tmp;
}
};
int main() {
int p;
cin >> p;
bigint ans(1), tmp(2);
while (p) {
if (p & 1) {
ans = ans * tmp;
}
ans = ans * ans;
p >>= 1;
}
ans = ans - 1;
cout << ans.num[0] << endl;
for (int i = 500; i >= 1; --i) {
cout << ans.num[i];
}
return 0;
}
};
int main()
{
return gdb7::main();
}