示例: 123->一百二十三
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
string convertNum(int num)
{
static const string letter[] = { "零","一","二","三","四","五","六","七","八","九" };
static const string unit[] = { "","十","百","千","万","十","百","千","亿","十" };
string src;
string des;
string tmp;
tmp = to_string(num);
src.append(tmp);
//负数的情况
if (num < 0)
{
des.append("负");
src.erase(0, 1);
}
int len = src.length();
bool bPreZero = false;
//遍历处理每一位
for (int i = 0; i < len; i++)
{
//获取数字和单位
int digit = src.at(i) - '0';
int unit_index = len - i - 1;
//如果数字是1,单位是十,那么1不用显示
if (i == 0 && digit == 1 && (unit_index == 1 || unit_index == 5 || unit_index == 9))
{
des.append(unit[unit_index]);
}
//如果数字是0,单位不是万或者亿就这一位不需要任何显示,如果是的话只需要显示万或者亿
else if (digit == 0)
{
bPreZero = true;
if (unit_index == 4 ||
unit_index == 8)
{
des.append(unit[unit_index]);
bPreZero = false;
}
}
else
{
//数字不是0的情况,先检查bPreZero,如果为true,在输出当前位之前需要输出零。然后再输出自己的数字和单位
if (bPreZero)
{
des.append(letter[0]);
}
des.append(letter[digit]);
des.append(unit[unit_index]);
bPreZero = false;
}
}
return des;
}
int main(int argc, char *argv[])
{
while (1)
{
int num;
cin >> num;
string result = convertNum(num);
cout << result << endl;
system("pause");
}
return 0;
}