题目:
输入一个整数(位数不超过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在不同位置的读法——以万为界】分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/66881.html