输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
PTA 测试网站没有检测万位点,当102003211
时,输出bYcBdQcBbSb
依然可以通过,正确应为bYcBWdQcBbSb
但这里对此进行了考虑。
边阅读代码边理解注释的思路,有问题请讨论
AC代码
#include<iostream>
using namespace std;
int main(void){
int n,initial_n;
cin>>initial_n;
n=initial_n;
char num[10]={'a','b','c','d','e','f','g','h','i','j'};
char unit[10]={0,0,'S','B','Q','W','S','B','Q','Y'};
char result[17]={0};
int i,last_i=i%10;
int j=0;
int count_n=0;
int flag=0;
//区分i==0和i!=0的情况
//将两块分开
//i!=0时 直接把unit放入,然后放入num值
//但是在万位组(万、十万、百万、千万)略有不同
//只有万位组第一次非0出现数值时,才放入W,仅放一次,
//所以用flag标记,并将万位踢出一般放unit情况
// (对应: if(count_n!=5)
// result[j++]=unit[count_n];)
//主要程序开始
while(n>0){
i=n%10;
n/=10;
count_n++;
//i==0
if(i==0&&count_n%4>1){//只有在各位组的十位和百位
//(十位、百位、十万位置、千万位)才读0
if(last_i!=0)//上一个i(last_i不是0,才放入这个0)
result[j++]=num[i];
}
//i!=0
if(i!=0&&count_n>1){
if(count_n>=5&&count_n<=8&&flag==0){
result[j++]=unit[5];
flag=1;
}
if(count_n!=5)
result[j++]=unit[count_n];
}
if(i!=0)
result[j++]=num[i];
last_i=i;
}
if(initial_n==0)
result[j++]=num[i];
for(j=j-1;j>=0;j--)
printf("%c",result[j]);
printf("\n");
return 0;
}