5-49 幣值轉換   (20分)

輸入一個整數(位數不超過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;
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章