币值转换

输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:

gQjB

分析:

1.题目条件:

基本输出顺序:数字在前,单位在后,个位无单位

有一些特殊的情况值得注意:

1.万位为0,没有数字,但必有单位,如100000,读作壹拾万,即bSW

2.千位为0,没有数字也没有单位,如10100,读作壹万壹佰,即bWbB

3.当前位为0,前一位也为0,没有数字和单位,如100,读作壹佰,即Bb

4.当前位为0,前一位非0,有数字,无单位,如101,读作壹佰零壹,即bBab

话不多说,代码附上,测试通过。

#include <stdio.h>

int main()
{
    char num[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
    char NUM[3] = {
        'Q',
        'B',
        'S',
    };
    char out[17] = "";
    int funcchange(int i, char *str)
    {
        int n[4];
        n[0] = i / 1000;
        n[1] = i % 1000 / 100;
        n[2] = i % 100 / 10;
        n[3] = i % 10;
        int j = 0, k = 4;

        for (int k = 0; k < 4; k++)
        {
            if (n[k] > 0)
            {
                str[j] = num[n[k]];
                j++;
                if (k < 3)
                {
                    str[j] = NUM[k];
                    j++;
                }
            }
            else
            {
                if ((j == 0) || ((j > 0) && (str[j - 1] != 'a')))
                {
                    str[j] = 'a';
                    j++;
                }
            }
        }
        if (str[j - 1] == 'a')
            j -= 1;
        return j;
    }
        long long n;
        scanf("%lld", &n);
        if (n == 0)
        {
            printf("a");
            return 0;
        }
        int a = n / 100000000;
        int b = n % 100000000 / 10000;
        int c = n % 10000;
        int m = 0;
        if (a > 0)
        {
            out[m] = num[a];
            m++;
            out[m] = 'Y';
            m++;
        }
        if (b > 0)
        {
            m += funcchange(b, out + m);
            out[m] = 'W';
            m++;
        }
        if (c > 0)
            m += funcchange(c, out + m);
        if (out[m - 1] == 'a')
            out[m - 1] = '\0';
        else
            out[m] = '\0';
        if (out[0] == 'a')
            printf("%s", out + 1);
        else
        {
            printf("%s", out);
        }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值