推荐说面试题

推荐道面试题
1,实现如下函数:返回字符串为输入数字的语音读法。
std::string readNum(unsigned int uNum)
{//输入为参数数据类型范围内的所有可能的数字。

   
}
例如:
输入1402应返回“YiBaiSiShiLingEr"
输入609830023应返回“LiuYILingJiuBeiBaShiSanWanLingErShiSan"
要求完成时间小于2小时。自己验证用例不少于都10个。

2,与上相反,输入字符串输出数字:
unsigned int uNum getNum(const std::string& strPL)
{//输入字符串由如下Word组成:
//Ling,Yi,Er,San,Si,Wu,Liu,Qi,Ba,Jiu,Shi,Bai,Qian,Wan,YI
   
}
例如:
输入“YiBaiSiLingEr"应返回1402
输入“LiuYiLingJiuBeiBaShiSanWanLingErShiSan"应返回609830023
要求完成时间小于2小时。自己验证用例不少于都10个。



------解决方案--------------------
C/C++ code

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<string> str;
string weistr[4] = {"Shi","Bai","Qian","Wan"};
string numstr[10] = {"Lin","Yi","Er","San","Si","Wu","Liu","Qi","Ba","Jiu"};
    
void translation_shi(unsigned long s,bool flags)//flags变量指定是否要加Lin,比如102,是YiBaiLinEr
{
    if (s == 0)return;
    if (s/10>=1)
    {
        str.push_back(numstr[s/10]);
        str.push_back(weistr[0]);
        if (s%10!=0)
            str.push_back(numstr[s%10]);
    }
    else
    {
        if (flags)
            str.push_back(numstr[0]);
        str.push_back(numstr[s]);
    }
}
void translation_bai(unsigned long b,bool flags)
{
    if (b==0)return;
    if (b/100>=1)
    {
        str.push_back(numstr[b/100]);
        str.push_back(weistr[1]);
        translation_shi(b%100,true);
    }
    else
    {
        if (flags)
            str.push_back(numstr[0]);
        translation_shi(b,false);
    }
}
void translation_qian(unsigned long q,bool flags)
{
    if (q==0)return;
    if (q/1000>=1)
    {
        str.push_back(numstr[q/1000]);
        str.push_back(weistr[2]);
        translation_bai(q%1000,true);
    }
    else
    {
        if (flags)
            str.push_back(numstr[0]);
        translation_bai(q,false);
    }
}
void translation_wan(unsigned long w)
{
    if (w==0)
    {
        str.push_back(numstr[0]);
        return;
    }
    if (w/10000>=1)
    {
        translation_qian(w/10000,false);
        str.push_back(weistr[3]);
        translation_qian(w%10000,true);
    }
    else
    {
        translation_qian(w,false);
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    int n;
    while (cin>>n)
    {
        translation_wan(n);
        for (vector<string>::iterator i=str.begin(); i!=str.end(); ++i)
        {
            cout<<*i;
        }
        cout<<endl;
        str.clear();
    }
    return 0;
}