编程:阿拉伯数字转为钱数@递归方法(如123,转为一百二十三)

来源:互联网 发布:气味图书馆淘宝 编辑:程序博客网 时间:2024/05/20 10:53
 

//说明:主要是递归和static的使用,9位数以内(包含9位数)的转换

//时间问题,细节没有全部考虑,比如输入大于9位数的返回就不对,异常问题,主要思想这样,mark一下,以后改进

string _change(const long lmoney);

void main()
{
     long lmoney=123456789;
     cout<<"返回值--"<<_change(lmoney)<<endl; //返回值--一亿二千三百四十五万六千七百八十九
}
string _change(const long lmoney)
{
    cout<<"--_change"<<endl;
    static long lmoneyback=lmoney;
    char smoney[10];
    memset(smoney,0,sizeof(smoney));
    sprintf(smoney, "%d", lmoney);

    static int pos=0;
    static int rpos=strlen(smoney);

    cout<<"pos="<<pos<<"\t"<<"rpos="<<rpos<<"\t"<<"smoney="<<smoney<<endl;
    //(0,8) (9,1) (123456789)

    string s;
    switch(smoney[pos])
    {
        case '1': s="一";break;
        case '2': s="二";break;
        case '3': s="三";break;
        case '4': s="四";break;
        case '5': s="五";break;
        case '6': s="六";break;
        case '7': s="七";break;
        case '8': s="八";break;
        case '9': s="九";break;
        case '0': s="零";break;
    }
    pos++;

    static string sReturn;
    switch(rpos)
    {
        case 1:
        sReturn=sReturn+s; break;
        case 2:
        sReturn=sReturn+s+"十";break;
        case 3:
        sReturn=sReturn+s+"百";break;
        case 4:
        sReturn=sReturn+s+"千";break;
        case 5:
        sReturn=sReturn+s+"万";break;
        case 6:
        sReturn=sReturn+s+"十";break;
        case 7:
        sReturn=sReturn+s+"百";break;
        case 8:
        sReturn=sReturn+s+"千";break;
        case 9:
        sReturn=sReturn+s+"亿";break;
    }
    rpos--;

    lmoneyback=lmoneyback/10;
    if(lmoneyback!=0) return _change(lmoney);

    cout<<"sReturn="<<sReturn<<endl;
    return sReturn;
}

(2011-10-27 19:27:48)