#include <iostream>
#include <math.h>
#include <string.h>

using namespace std;

string decimal_to_binary(int decimal_temp) {
	string binary_temp;
	if (decimal_temp == 0) {
		binary_temp = "0";
	}
	else
	{
		while (decimal_temp > 0)
		{
			if (decimal_temp % 2 == 0) {
				binary_temp = binary_temp + '0';
			}
			else
			{
				binary_temp = binary_temp + '1';
			}
			decimal_temp = decimal_temp / 2;
		}
	}
	//Dao nguoc chuoi binary
	reverse(binary_temp.begin(), binary_temp.end());	
	return binary_temp;
}

int binary_to_decimal(string binary_temp) {
	int to_the_power_of = binary_temp.length() - 1;
	int decimal_temp = 0;
	for (int i = 0; i < binary_temp.length(); i++) {
		if (binary_temp[i] == '1') {
			decimal_temp = decimal_temp + pow(2, to_the_power_of);
		}
		to_the_power_of--;
	}
	return decimal_temp;
}

int input_int() {
	int temp;
	do {
		cout << "Nhap mot so thap phan bat ky lon hon 0: ";
		cin >> temp;
	} while (temp < 0);
	return temp;
}

string input_string() {
	string temp;
		cout << "Nhap mot so nhi phan bat ky: ";
		cin >> temp;
	return temp;
}

void Menu() {
	int func;
	cout << "----------Menu----------" << endl;
	cout << "1: Doi tu so thap phan sang nhi phan." << endl;
	cout << "2: Doi tu so nhi phan sang thap phan." << endl;
	cout << "Nhap chuc nang: ";
	cin >> func;
	switch (func)
	{
	case 1:
		{
		int decimal = input_int();
		string binary = decimal_to_binary(decimal);
		cout << "So nhi phan cua so ban vua nhap la: " << binary << endl;
		break;
		}
	case 2:
		{
		string binary = input_string();
		int decimal = binary_to_decimal(binary);
		cout << "So thap phan cua so ban vua nhap la: " << decimal << endl;
		break;
		}
	default:
		{
		cout << "Ban da chon sai chuc nang, vui long nhap lai" << endl;
		Menu();
		break;
		}
	}
}

int main()
{	
	Menu();
}