金额转换问题

1.金额转换问题:

   将阿拉伯数字转换成中国传统形式, 例如:101000001010  转换为  壹仟零壹拾億零壹仟零壹拾园整

2.问题处理:

   主要考虑方面有(1)输入数的头几位为零的情况(2)输入数中有连续零的处理问题(3)输入数中有的零并不输出的问题

3.代码加注释如下:

#include<iostream>
#include<string.h>
using namespace std;

int main()
{
    string str;
    int i=0,t;
    char a,b,c,d,e,key;
    cout<<"please input your money under one  trillion:"<<endl;//输入一个小于一万亿的数
    cin>>str;
    t=str.size();//记录字符的长度
    while(i<t)
    {
        key=str[i];
        if((t-i)==8&&str[i-1]=='0')//考虑在亿位后输出零的情况
        {
            if((str[t-5]!='0')||(str[t-6]!='0')||(str[t-7]!='0')||(str[t-8]!='0'))
            cout<<"零 (0)";
        }

        if((t-i)==4&&str[i-1]=='0')//考虑在万位后输出零的情况
        {
            //if((str[i-1]!='0')||(str[i-2]!='0')||(str[i-3]!='0'))
            if((str[t-1]!='0')||(str[t-2]!='0')||(str[t-3]!='0')||(str[t-4]!='0'))
            cout<<"零 (0)";
        }
        if((i>=1)&&(str[i]=='0')&&(str[i-1]=='0')){key=' ';}//连续的零只输出一次零
        if((t-i)%4==3&&str[i]=='0'&&str[i+1]=='0'&&str[i+2]=='0'){key=' ';}//百位,十位,个位同时为零什么也不输出
        if((t-i)%4==2&&str[i]=='0'&&str[i+1]=='0'){key=' ';}//个位,十位为零什么也不输出
        if((t-i)%4==1&&str[i]=='0'){key=' ';}//个位为零什么也不输出
        if((t-i)%4==0&&str[i]=='0'){key=' ';}//千位为零什么也不输出
        switch(key)
        {
            case '0':cout<<"零 (0)";break;
            case '1':cout<<"壹 (1)";break;
            case '2':cout<<"贰 (2)";break;
            case '3':cout<<"叁 (3)";break;
            case '4':cout<<"肆 (4)";break;
            case '5':cout<<"伍 (5)";break;
            case '6':cout<<"陆 (6)";break;
            case '7':cout<<"柒 (7)";break;
            case '8':cout<<"捌 (8)";break;
            case '9':cout<<"玖 (9)";break;
            case ' ':break;
        }
        if(str[i]!='0')//在适当的地方输出仟,佰,拾,萬,億
        {
        if((t-i)%4==0)cout<<"仟 (qian)";
        if((t-i)%4==3)cout<<"佰 (bai)";
        if((t-i)%4==2)cout<<"拾 (shi)";
        }

        if((t-i)==5)
        {
            if((str[t-5]!='0')||(str[t-6]!='0')||(str[t-7]!='0')||str[t-8]!='0')//排除所有万位为零的情况
            cout<<"萬 (wang)";
        }
        if((t-i)==9&&(str[i]!=0))cout<<"億 (yi)";
        i=i+1;
        }
    return 0;
}
运行结果如下:

注意:由于所用编译器版本过低,一些汉字无法识别,故在汉字后加了括号中的数字和拼音作为解释,如果编辑器可以识别中国货币中的古汉字,只要把汉字后加了括号中的数字和拼音去掉即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值