c语言币值转换

#include <stdio.h>

 

int main() {

    int money;

    scanf("%d", &money);

 

    // 币值为 0 的情况特殊处理

    if (money == 0) {

        printf("a");

        return 0;

    }

 

    /*

     * 获取 money 的各位数字并依次存进 digits 数组中,

     * 如 money = 813227345 八亿一千三百二十二万七千三百四十五,则 digits[10] = {5, 4, 3, 7, 2, 2, 3, 1, 8}

     */

    int len = 0;

    int digits[9] = {0};

    while (money) {

        digits[len++] = money % 10;

        money /= 10;

    }

 

    /*

     * 币值单位:S、B、Q、W、Y 分别代表拾、百、仟、万、亿,

     * 巧妙设计其与 digits 数组的关系,不难看出当逆序遍历 digits 数组时,digits 数组的下标恰与 currencyUnit 单位符合

     * digits[10] = {5, 4, 3, 7, 2, 2, 3, 1, 8} | 813227345

     * currencyUnit[9] = {'\0', 'S', 'B', 'Q', 'W', 'S', 'B', 'Q', 'Y'} | 八亿一千三百二十二万七千三百四十五

     */

    char currencyUnit[9] = {'\0', 'S', 'B', 'Q', 'W', 'S', 'B', 'Q', 'Y'};

 

    // 从 digits 数组尾往头遍历,输出对应的人民币值

    for (int i = len - 1; i >= 0; i--) {

        if (digits[i]) {

            // 字母 a-j 对应数字 0-9,此处输出 money 值及单位,巧用下标 i 与币值单位数组 currencyUnit 的对应关系

            printf("%c%c", digits[i] + 'a', currencyUnit[i]);

        } else if (i == 4) {

            // 判断是否需要输出币值单位万,当且仅当 i == 4 并且存在十万 | 百万 | 千万时才输出 W

            if (digits[5] || digits[6] || digits[7]) {

                printf("W");

            }

        } else if (i - 1 >= 0 && digits[i - 1]) {

            /*

             * 题目要求:“零” 的用法必须符合中文习惯,

             * 向前看一位判断是否输出当前 0 对应的 a,当且仅当当前 0 不是 money 的末位数字且 0 的前一个数字不为 0 时才输出 a,

             * 如 6900(六千九百 gQjB digits = {0, 0, 9, 6, 0...}) 不需要输出 0,

             * 而 6090(六千零九十 gQajS digits = {0, 9, 0, 6, 0...})仅需要输出 6 和 9 中间的 0

             */

            printf("a");

        }

    }

 

    return 0;

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值