Friday, April 24, 2015

UVa 11955 - Binomial Theorem

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;

void print(string a, int e) {
	if (e == 0)
		return;
	cout << a;
	if (e > 1)
		cout << "^" << e;
}

int main() {

	unsigned long long int C[51][51] = { 0 };
	for (int i = 0; i <= 50; i++) {
		C[i][0] = 1;
	}
	for (int i = 1; i <= 50; i++)
		for (int j = 1; j <= i; j++)
			C[i][j] = C[i - 1][j - 1] + C[i - 1][j];

	int cases;
	cin >> cases;
	string line;
	for (int cas = 1; cas <= cases; cas++) {
		cin >> line;

		// parse (a+b)^e
		int plusPos = line.find_first_of("+");
		int parePos = line.find_first_of(")");
		string a = line.substr(1, plusPos - 1);
		string b = line.substr(plusPos + 1, parePos - 1 - plusPos);
		int e = atoi(line.substr(parePos + 2).c_str());

		cout << "Case " << cas << ": ";
		print(a, e);
		for (int i = 1; i < e; i++) {
			cout << "+";
			if (C[e][i] > 0)
				cout << C[e][i];

			cout << '*';
			print(a, e - i);
			cout << '*';
			print(b, i);
		}
		cout << "+";
		print(b, e);
		cout << endl;

	}

	return 0;
}

No comments:

Post a Comment