/*
	© MATTO MATTI 2018
	http://mattomatti.com/pl/a0169
	napisane przy użyciu Visual Studio Community 2015
	2018-11-06 v 1.0
*/

#include <iostream>
#include <string>
#include <stack>
#include <cmath>

using namespace std;

int pakujBCD(int a) {
	int bcd = 0;
	stack<int> cyfry;
	while (a > 10) {
		cyfry.push(a % 10);
		a /= 10;
	}
	cyfry.push(a);
	while (!cyfry.empty()) {
		int c = cyfry.top();
		cyfry.pop();
		bcd <<= 4;
		bcd |= c & 15;
	}
	return bcd;
}

int rozpakujBCD(int bcd) {
	int a = 0;
	int mn = 1;
	for (int i = 0; i < sizeof(int) * 8; i += 4) {
		int c = bcd & 15;
		bcd >>= 4;
		a += c * mn;
		mn *= 10;
	}
	return a;
}

void wypiszBinarnie(int a) {
	for (int i = sizeof(int) * 8 - 1; i >= 0; i--) {
		cout << (char)(((a & (int)pow(2, i)) >> i) + '0');
	}
}

int main() {
	int a;
	cout << "Podaj liczbe do konwersji:\n a = ";
	cin >> a;
	int bcd = pakujBCD(a);
	cout << "BCD: ";
	wypiszBinarnie(bcd);
	int b = rozpakujBCD(bcd);
	cout << endl << "DEC: " << b << endl;
	system("pause");
	return 0;
}