输入一个整数(位数不超过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;
}