币值转换

Source

币值转换 (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';
				}
			}
		}
	}
	//逆序输出res数组 
	for(i=k-1;i>=0;i--){
		cout<<res[i];
	}
	
	  
	return 0;
}