将金额使用汉字表示
#include <iostream>
#include <sstream>
int main()
{
double money = 0;
char* chnNums[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
char* chnUnits[] = {"亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", ""};
while (std::cin >> money)
{
int intMoney = static_cast<int>((money + 0.005) * 100);
int integer = intMoney / 100;
int decimal = intMoney % 100;
std::stringstream ss{};
ss << "人民币";
bool isLastNumZero = false;
bool isFirstNumFound = false;
int unitBase = 1000000000;
if (integer != 0)
{
for (int i = 0; i < 9; ++i)
{
unitBase /= 10;
if (integer < unitBase)
{
if (!isFirstNumFound) continue;
if (i == 4) { ss << chnUnits[i]; }
isLastNumZero = true;
}
else
{
int num = integer / unitBase;
integer %= unitBase;
if (isLastNumZero) { ss << chnNums[0]; }
isLastNumZero = false;
if (!isFirstNumFound && num == 1 && (i == 3 || i == 7)) { ss << chnUnits[i]; }
else { ss << chnNums[num] << chnUnits[i]; }
}
isFirstNumFound = true;
}
ss << (decimal == 0 ? "元整" : "元");
}
if (decimal != 0)
{
if (decimal > 9) ss << chnNums[decimal / 10] << "角";
decimal %= 10;
if (decimal > 0) ss << chnNums[decimal] << "分";
}
std::cout << ss.str() << std::endl;
}
}