PTA题集——基础——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

思路:这一题无论如何总归都能做出来,关键在于如何简化,我这里将数字以及单位分别存到两个数组当中,并且对单位数组进行排序处理,方便之后循环中调用。这一次最主要在于0以及万位的处理,所以需要变量来记录位数以及0是否出现了连续的情况,代码如下

#include <stdio.h>
#include <math.h>




int main() {
    int n;
    scanf("%d", &n);
    char *sv[10]={"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"};
//    char *st[8]={"Y", "Q", "B", "S" "W", "Q", "B", "S"};
    char *st[8] = {"S", "B", "Q", "W", "S", "B", "Q", "Y"};
    int w=0;
	int j;
	int temp=n;
	while (temp){
		temp /= 10;
		w++;  // 获取位数
	}
	j = pow(10, w-1);
	
	int h;
	int z_c=0;  // 记录0是否连续
	
	if (n==0){  // 考虑0的情况
		printf("a");
	}
	
	while (n){
		h = n/j;
		if (h){
			printf("%s%s", sv[h], st[w-2]);
			z_c=0;
		}else{
			if (z_c!=1){  // 不连续时
				if (w==5){  // 处于万位时只输出万
					printf("W");
					z_c=0;
				}else{
					printf("a");  // 正常情况输出0即可
					z_c=1;
				}
			}
		}

		n = n % j;
		j /= 10;
		w--;
		if (j==1){
			if (n==0){
				break;
			}
			printf("%s", sv[n]);
			break;
		}
	}
    return 0;
}


发布了33 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sinat_38354769/article/details/102720051