币值转换 — C语言【0在不同位置的读法——以万为界】

币值转换 — C语言【0在不同位置的读法——以万为界】题目:输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式

题目:

输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。

输入格式:

输入在一行中给出一个不超过9位的非负整数。

输出格式:

在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。


思路:

1.保存.  将数字保存在数组中(个位数字存放在arr[0],依次递增)

2.转化.  将数组下标视为位数,值视为该位数上的数字,从高到低遍历数组,通过Switch函数读出转化后相应的值和位数(非0数字,读出值的同时会读出相应的位数单位)


难点:【0在不同位置的读法——以万为界】

【1】当万位上的数字为0时,要读位数“万” ,不读数字0     例如:1201234 

*注:若从千万位到万位全为0,则不读位数“万” ,不读数字0       例如:100001234

【2】从某高位开始到万位(包括万位)全为0,则不读数字0         例如:1001234

【3】从某高位开始到万位不全为0,则读一次数字0        例如:100101234

【4】从万位到个位,0后面出现非0数字,只读一次数字0  例如:109001

【5】从万位到个位,某项开始后面全为0,则不读数字0  例如:109000

***********************************综上可得*******************************************

从高到低遍历(外层遍历),若某项为0,则从该项开始遍历剩余项(内层遍历),

1)若遍历到万位且万位数字也为0,则输出位数“万”(排除千万位为0的情况),

2)若遍历途中出现非0数,则读一次0,且将下标传给外层遍历,内层遍历结束。


代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void read_count(int cnt) {
    switch (cnt) {
    case 1:printf("S"); break;
    case 2:printf("B"); break;
    case 3:printf("Q"); break;
    case 4:printf("W"); break;
    case 5:printf("S"); break;
    case 6:printf("B"); break;
    case 7:printf("Q"); break;
    case 8:printf("Y"); break;

    default:break;
    }
}
void read_num(int num) {
    switch (num) {
    case 0:printf("a"); break;
    case 1:printf("b"); break;
    case 2:printf("c"); break;
    case 3:printf("d"); break;
    case 4:printf("e"); break;
    case 5:printf("f"); break;
    case 6:printf("g"); break;
    case 7:printf("h"); break;
    case 8:printf("i"); break;
    case 9:printf("j"); break;
    default:break;
    }
}

int main() {
    //1.接收数字
    int arr[9] = { 0 }, i = 0;
    int num;
    scanf("%d", &num);
    while (num != 0) {
        arr[i] = num % 10;
        num /= 10;
        i++;
    } 
  
    //2.转换               
   
    if(i==0&&arr[i]==0){ //特殊值:输入数字为0,单独读出数字0
        read_num(0);
    }
    for (int j = i-1; j >= 0; j--) {
        if (arr[j] != 0 ) {    //数字不为0,读出值和所在位数单位
            read_num(arr[j]);
            read_count(j);
        }
        else {            
                for (int k = j; k >= 0;k--) {
                    if(j>=4&&j<7&&k==4){  //万位为0,只读位数单位(若从千万位到万位全为0,则不读)
                     read_count(k);
                        j=k;
                        break;
                    }
                    if (arr[k] != 0) {  //0后面有非0数字,只读一次数字0
                        read_num(arr[j]);
                        j=k+1;
                        break;
                    }
                }                        
        }
    }
    return 0;
}

结果:

币值转换 — C语言【0在不同位置的读法——以万为界】

币值转换 — C语言【0在不同位置的读法——以万为界】 

币值转换 — C语言【0在不同位置的读法——以万为界】 

 

 

今天的文章币值转换 — C语言【0在不同位置的读法——以万为界】分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/66881.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注