注册 登录
编程论坛 C++教室

求助!如何将阿拉伯数字转化为汉字。

bibi570 发布于 2016-05-21 15:43, 4257 次点击
如123456 就是十二万三千四百五十六
3 回复
#2
yangfrancis2016-05-21 20:58
大致思路就是将阿拉伯数字对一千万整除,得到千万位数字,再与汉字匹配。然后对一千万取余,取余之后对一百万整除,得到百万位数字,再与汉字匹配……降到万位时加上“万”字。万位以下处理方式也差不多。
#3
xiexiejohn2016-05-24 00:07
//这个可以

//程序把数字转成汉字金额数字

#include <iostream>
#include <string>
using namespace std;
void hz(string);
inline string getnum(string);
inline string getys(int);



int main(void)
{
    string str1="";
    do
    {
        if(str1!="") cout<<"当前输入数字为"<<str1.length()<<endl;
        cout<<"请输入最多13位数字,输入-1结束:";
        cin>>str1;
    }while(str1.length()>13 && str1!="-1");
    if(str1 != "-1") hz(str1);
   
    return 0;
}

string getnum(string c)                //得到数字对应汉字
{   
    string hz1="0零1一2二3三4四5五6六7七8八9九";
    return hz1.substr(hz1.find(c,0)+1,2);
}

string getys(int i)                    //得到数字位数
{
    string hz2="零元十百千万十百千亿十百千万兆";
    return hz2.substr(i+i,2);
}


void hz(string zw)
{
    int i;
    int k=zw.length()-1;        //-1是为了和下面配合zw.substr函数
    string c;                    //保存zw某位数字
   
   
    string viewhz="";
    bool zero=false;            //0标志
    bool wa=false;                //万标志
    bool yi=false;                //亿标志

    for(i=1;i<=zw.length();++i,--k)
    {
        c=zw.substr(k,1);        //从倒数开始截取右边一位数
        if(c=="0")
        {
            if(zero==false)        //为f表示是第一次必须加零,t表示是连续0比如100002中4个0中某个
            {
                zero=true;
                viewhz="零"+viewhz;
            }
        }
        else                    //不是0是其它数字
        {
            zero=false;            //0标志清空
            switch(i)            //判断位数
            {
            case 5:                //万位
                wa=true;break;    //表示(万位不是0的数字)

            case 6:                //十万
            case 7:                //百万
            case 8:                //千万
                if(wa==false)        //如果万位是0(wa如果为T表示万位是数字,否则为0)
                {
                    viewhz="万"+viewhz;
                    wa=true;
                }
                break;
            case 9:
                yi=true;break;            //亿标志
            case 10:                    //十亿
            case 11:                    //百亿
            case 12:                    //千亿
            case 13:                    //万亿
                if(yi==false)        //yi这个标志没被用过
                {
                    viewhz="亿"+viewhz;
                    yi=true;
                }
                break;
            }
            viewhz=getnum(c)+getys(i)+viewhz;    //得到数字对应大写金额+所在的位数
        }
        
    }   
    cout<<viewhz<<endl;
}
#4
xiexiejohn2016-05-24 00:08
vb翻译来的
1