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)
{
int length = n.length();
if(n[0] == '-')
{
wcout << L"(âm) ";
n.erase(0,1);
if(length == 1)
{ length = -1;}
else
{ length--;}
}
string So;
if((length - 4) % 3 == 0 && length > 0)
{
So.append(n,0,1);
n.erase(0,1);
}
else if((length - 4) % 3 == 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 != "000")
{
BaChuSo(So);
PhuAm(soPhay);
}
else
{
if(soPhay % 3 == 0 && soPhay != 0)
{
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();
if(n[0] == '-')
{ check = 0;}
else
{ check = 1;}
}
}
}
system("cls");
SeparateNumberByComma(n);
wcout << "\n";
ReadNumberToWord(n);
}
return 0;
}
Revise this Paste
Parent: 108820