币值转换 (20 分)
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
int main(){
int num[15]={0};
char unit[10]={0,'S','B','Q','W','S','B','Q','Y'};
int i=0,n,sn=0,k=0; //数字n共sn位
char res[18];
cin>>n; //输入数字n
if(n==0){
cout<<"a";
return 0;
}
while(n){
num[i++]=n%10;
n /= 10;
}
sn = i;
/*
将每一个数字提取出来,判断其是否为0;
若不为0,则先往res数组中存入单位,再存入代表数字的字母
若为0,分为两种情况,
1.个位时忽略,
2.十位、百位、十万位、百万位时,若其低一位为0,则忽略; 若其低一位不为0, 则先往res数组中存入'a'
*/
for(i=0;i<sn;i++){
if(num[i]!=0){
//先存单位
if(i!=0) {
res[k++]=unit[i];
}
//再存表示数字的字母
res[k++]=num[i]+'a';
}else{
if(i==1 || i==2 || i==5 || i==6){
// res[k++]='a';
if(num[i-1]!=0){
res[k++]='a';
}
}else if(i==4){
if(num[4]!=0 || num[5]!=0 || num[6]!=0 || num[7]!=0){
res[k++]='W';
//若万位、十万位、百万位或千万位中,有一位不为0,就要加上'W'
}
}
}
}
//逆序输出res数组
for(i=k-1;i>=0;i--){
cout<<res[i];
}
return 0;
}