大疆测试笔试题--阿拉伯数字转中文

598 阅读1分钟

示例: 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;
}