M00PAIR - 0 0 Pairs

Tác giả: happyboy99x

Ngôn ngữ: C++

#include<cstdio>

const int N = 1000, BASE = 1000000000, LOG_BASE = 9, N_DIGIT = 34;
struct BigInteger {
	int d[N_DIGIT], n;

	void operator ++ () {
		for(int i = 0; i < n; ++i)
			if(++d[i] == BASE) d[i] = 0;
			else return;
		d[n++] = 1;
	}

	void operator += (const BigInteger &a) {
		if(a.n > n) n = a.n;
		int rem = 0;
		for(int i = 0; i < n; ++i) {
			int p = d[i] + a.d[i] + rem;
			if(p >= BASE) d[i] = p - BASE, rem = 1;
			else d[i] = p, rem = 0;
		}
		if(rem) d[n++] = rem;
	}

	void print() {
		printf("%d", d[n-1]);
		for(int i = n-2; i >= 0; --i)
			printf("%0*d", LOG_BASE, d[i]);
		printf("\n");
	}
} cOne[N+1], cZero[N+1];

int main() {
	for(int i = 1; i <= N; ++i) {
		cOne[i] = cOne[i-1];
		cOne[i] += cZero[i-1];
		cZero[i] = cOne[i];
		if(i % 2 == 0) ++cZero[i];
	}
	for(int n; scanf("%d", &n) == 1; cZero[n].print());
	return 0;
}

Download