輸入一個整數(位數不超過9位)代表一個人民幣值(單位爲元),請轉換成財務要求的大寫中文格式。如23108元,轉換後變成“貳萬叄仟壹百零捌”元。爲了簡化輸出,用小寫英文字母a-j順序代表大寫數字0-9,用S、B、Q、W、Y分別代表拾、百、仟、萬、億。於是23108元應被轉換輸出爲“cWdQbBai”元。
輸入格式:
輸入在一行中給出一個不超過9位的非負整數。
輸出格式:
在一行中輸出轉換後的結果。注意“零”的用法必須符合中文習慣。
輸入樣例1:
813227345
輸出樣例1:
iYbQdBcScWhQdBeSf
輸入樣例2:
6900
解析:
主要是何時輸出0的問題
1、以10000爲小節,小節的結尾即使是0,也不輸出0(如101001,一十萬一千零一,萬位上的0不輸出)
2、兩個非0數字之間 要且只能 輸出1個0(如1001,一千零一,十位和百位的0只輸出一個0)
3、當小節的 ”千“ 位是0時,若本小節無其它數字,則不輸出0,否則就要用0(如0100,一百,第一個0不輸出;10100,一萬零一百,第一個0輸出)
4、只有一個0時,輸出零
以下代碼只針對本題,只能應用9位數。(更通用的待更新,有空的話= =)
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main () {
int len, i = 0, flag = 0;
string s;
char unit[9] = {'0','S', 'B', 'Q', 'W', 'S', 'B', 'Q', 'Y'};
cin >> s;
len = s.length();
if( s == "0" ) { //只有0時,輸出a (規則4)
printf("a");
}
else {
while( i < len ) {
//連續遇到0,直到第一次遇到不是0(規則2,3)且不是倒數第4位 (規則1)
if ( s[i] != '0' && flag && i != len - 4 )
printf("a");
//連續遇到0,且是倒數第4位,則輸出W。(比如100001,十萬零一)
else if ( flag && i == len - 4 )
printf("W");
if ( s[i] != '0' ) { //如果不是0
printf( "%c", s[i] + 49 );
if ( unit[len - i - 1] != '0' ) //如果不是個位,輸出權位
printf( "%c", unit[len - i - 1] );
flag = 0; //標記遇到不是0
i++;
}
else { //碰到0,或者連續碰到0
i++;
flag = 1; //標記遇到0
}
}
}
return 0;
}