币值转换

时间:2021-08-19
本文章向大家介绍币值转换,主要包括币值转换使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
7-23 币值转换 (20 分)
 

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

输入格式:

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

输出格式:

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

输入样例1:

813227345
 
结尾无空行

输出样例1:

iYbQdBcScWhQdBeSf
 
结尾无空行

输入样例2:

6900

输出样例2:

gQjB

上面是测试点,思路:

1.用字符数组接收数据

2.设置两个字符数组,一个存a~j,一个存单位

3.再将数组逆置(因为我后面准备用atoi函数将字符串转成整型,而我们要从高位开始输出)(这地方可以不转整型用字符数组做,我懒得改了),转成整型

补:如果末尾全是0逆置后转换整型后0就会都消失

4.写一个计算整数位数的函数

5.这题主要在于0和W的处理

  1.0的处理:末尾全是0时,整数的位数和一开始字符数组的有效长度是不同的(这个是最重要的,因为后面的处理都根据这个),这个循环次数是整数的位数,所以去掉那些0后循环次数也是对                              的(这里不理解的话,可以自己动手算一下循环次数,也就是这里把前面不为0的部分全部按题目输出了);

       中间0的处理:假设当前数为0且后面一个也为0则不输出

  2.W的处理:看代码注释吧

      

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int count(int n){
    int count=0;
    while(n){
        n/=10;
        count++;
    }
    return count;
}
int main(){
    char b[10],c[10];
    int i,n;
    char a[11],d[7]={'0','S','B','Q','W','Y'};
    for(i=0;i<=9;i++)
        a[i]='a'+i;//a~j存到数组a中
    gets(b);
    char *p=b+strlen(b)-1,*q=c;
    while(*p){
        *q=*p;
        q++;
        p--;
    }//数组逆置
    *q=0;
    n=atoi(c);//字符转整型的函数
    int t=n;for(i=1;i<=count(n);i++){
        if(!(t%10==0&&t/10%10==0))//处理中间0
            printf("%c",a[t%10]);
        if(strlen(b)==9&&i==1)
            printf("Y");
        if(t%10&&(strlen(b)-i)%4<=4&&(strlen(b)-i)%4!=0)//若数字为0时则后面不跟单位,当处理第四位数字时要输出W单独处理
            printf("%c",d[(strlen(b)-i)%4]);
        if(strlen(b)-i==4)//W的单独处理
            printf("W");
        t/=10;
    }
    if(strlen(b)-count(n)>1&&strlen(b)>4)//处理末尾全是0且总位数超过4的情况下W
        printf("W");
    if(n==0)//这是第四个测试点,我这个卡了半年
        printf("a");
}

原文地址:https://www.cnblogs.com/sushang/p/15162981.html