Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C++ by ReadNumber ( 6 years ago )
#include <io.h> // Thư viện hỗ trợ hàm _setmode_
#include <fcntl.h> // Thư viện hỗ trợ hàm _O_WTEXT (_O_U16TEXT)
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <Windows.h>
#include <string>
using namespace std;

void MotChuSo(string n)
{
	if(n == "0")
	{ wcout << L"Không ";}
	else if(n == "1")
	{ wcout << L"Một ";}
	else if(n == "2")
	{ wcout << L"Hai ";}
	else if(n == "3")
	{ wcout << L"Ba ";}
	else if(n == "4")
	{ wcout << L"Bốn ";}
	else if(n == "5")
	{ wcout << L"Năm ";}
	else if(n == "6")
	{ wcout << L"Sáu ";}
	else if(n == "7")
	{ wcout << L"Bảy ";}
	else if(n == "8")
	{ wcout << L"Tám ";}
	else if(n == "9")
	{ wcout << L"Chín ";}
}

void HaiChuSo(string n)
{
	int number = stoi(n, nullptr, 10);
	int HangChuc = number / 10;
	int HangDonVi = number % 10;
	if(HangChuc != 1)
	{ 
		MotChuSo(to_string(HangChuc));
		wcout << L"Mươi ";
	}
	else
	{
		wcout << L"Mười ";
	}

	if(HangDonVi != 0)
	{
		if(HangDonVi == 5)
		{ wcout << L"Lăm ";}
		else if(HangDonVi == 1 && HangChuc > 1)
		{ wcout << L"Mốt ";}
		else
		{ 
			MotChuSo(to_string(HangDonVi));
		}
	}
}

void BaChuSo(string n)
{
	int number = stoi(n, nullptr, 10);
	int HangTram = number / 100;
	int HangChucDonVi = number % 100;
	int HangChuc = HangChucDonVi / 10;
	int HangDonVi = HangChucDonVi % 10; 

	MotChuSo(to_string(HangTram));
	wcout << L"Trăm ";
	if(HangChuc != 0)
	{ 
		HaiChuSo(to_string(HangChucDonVi));
	}
	else
	{
		if(HangChucDonVi != 0)
		{
			wcout << L"Lẻ ";
			MotChuSo(to_string(HangDonVi));
		}
	}
}

void PhuAm(int soDauPhay)
{
	if(soDauPhay % 3 == 1)
	{ wcout << L"Nghìn ";}
	else if(soDauPhay % 3 == 2)
	{ wcout << L"Triệu ";}
	else if(soDauPhay % 3 == 0 && soDauPhay != 0)
	{ wcout << L"Tỷ ";}
}

void SeparateNumberByComma(string n)
{
	if(n == "")
	{ 
		n = "0";
		wcout << n[0];
	}
	else
	{
		int length = n.length();
		int i = 0;

		if(n[i] == '-')
		{
			wcout << n[i];
			i = 1;
		}

		wcout << n[i];

		for(i = i + 1; i < length; i++)
		{
			if((length - i) % 3 == 0)
			{ wcout << ",";}
			wcout << n[i];
		}
	}
}

int stringComparison(string n1, string n2)
{
	if(n1[0] == '-' || n2[0] == '-')
	{ return 0;}

	int length_n1 = n1.length();
	int length_n2 = n2.length();
	if(length_n1 < length_n2)
	{ return 0;}
	else if(length_n1 > length_n2)
	{ return 1;}
	else
	{
		int index = 0;
		while(n1[length_n1] != '\0')
		{
			if(n1[index] < n2[index])
			{ return 0;}
			else if(n1[index] > n2[index])
			{ return 1;}
			index++;
		}
	}

	return 2;
}

void ReadNumberToWord(string n)
{
	

	//long long int LuyThua = pow(10, (3 * soPhay));
	//int So = n / LuyThua;
	//
	//n %= LuyThua;

	//if(check == 0)
	//{ wcout << L"(âm) ";}
	string So;
	int length = n.length();
	//BIG PROBLEM HERE: over 1 million will reach issue
	if(length % 3 == 1)
	{ 
		So.append(n,0,1);
		n.erase(0,1);
	}
	else if(length % 4 == 1 && length != 1)
	{ 
		So.append(n,0,2);
		n.erase(0,2);
	}
	else
	{ 
		So.append(n,0,3);
		n.erase(0,3);
	}

	int soPhay;
	//To Avoid press'Backspace' at the first character
	if(length == 0)
	{ 
		soPhay = 0;
		So = "0";
	}
	else
	{ soPhay = (length - 1) / 3;}
	if(stringComparison(So,"10") == 0)
	{ MotChuSo(So);}
	else if(stringComparison(So,"100") == 0)
	{ HaiChuSo(So);}
	else if(stringComparison(So,"1000") == 0)
	{ BaChuSo(So);}
	PhuAm(soPhay);
	soPhay--;
	
	while(soPhay >= 0)
	{
		string So = "";
		So.append(n,0,3);

		if(So != "0")
		{
			BaChuSo(So);
			PhuAm(soPhay);
		}
		else
		{
			if(soPhay == 3 || soPhay == 6)
			{
				wcout << L"Tỷ ";
			}
		}

		n.erase(0,3);
		soPhay--;
	}
}

int main()
{
	//_setmode(_fileno(stdin), _O_U16TEXT);
	_setmode(_fileno(stdout), _O_WTEXT); // Khi nhập tiếng việt phải có dòng này nếu không sẽ không ra được TV có dấu.
	// NOTE: và tất cả đề phải chỉnh thành wcout (wcin) << (>>) L""; nếu không sẽ bị báo lỗi runtime.
	// Nếu muốn nhập lại không dấu phải thay tất cả thành wcout sẽ không bị lỗi khi nhập không dấu.
	char num;
	string n; //= 1001;//rand() % 10000000001;
	int check = 1;
	//long long int maximumTypeValue = (long long int)pow(2, 8 * sizeof(n) - 1) - 1;

	while(true)
	{
		num = getch();
		if((num >= '0' && num <= '9') || num == 8 || num == 45)
		{
			if(num == 45 && check == 1)
			{
				n.push_back(num);
				check = 0;
			}
			else if(num >= '0' && num <= '9')
			{
				n.push_back(num);
				check = 0;// Chưa tối ưu để tránh việc nhập '-' ở giữa
			}
			else if(num == 8)
			{
				if(n != "")
				{ 
					n.pop_back();
					check = 0;// Chưa tối ưu để tránh việc nhập '-' ở giữa
				}
				else
				{ check = 1;}
			}
		}
		
		system("cls");
		SeparateNumberByComma(n);
		wcout << "\n";
		ReadNumberToWord(n);
	}

	return 0;
}

 

Revise this Paste

Parent: 108620
Your Name: Code Language: