有次在百度的面试中遇到了这个问题,当时做的比较挫,现在仔细想了一下然后写了这样的一段代码。我是按照人对数字的分析来写的这段代码。
首先,如果在数字中有小数部分,那么直接从末尾开始将小数部分的每一位转换为中文,即代码20-28行所示,最后需要增加一个“点”字。然后,从小数点左边的低位到高位四位四位地进行转换,如代码34-51行所示。flag是0位数的计数,如果当前四位全是0那么不需要每四位的单位,如”萬”,”億”,”兆”等,见52-53行。如果当前四位右边紧接着的几个位是零,那么视需要添加一个零,例如10001写作壹萬零壹,见代码37-38行。如果当前四个位中有一个或连续几个零,需要添加一个零,见39-40行,例如1001写作壹仟零壹。47-48行的代码是处理但个“0”的情况。还有一种情况比较特殊,就是有10这种情况,并不是写作“数+位”的形式,这种情况只考虑这个“拾”在最高位的情况,见代码43-45行。最后,每个四位组合在一起,转换就完成了!
#include <iostream>
#include <stack>
#include <string>
using namespace std;
string convert(string str)
{
const cha