PTA [币值转换] 模拟
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
- 递归生成 (原题小于 1e10
- 0 的使用, 十百千万单位相邻,但是亿和万之间不相邻,会产生零
- 特判 0 (一定要想到
#include<cstdio>
#include<iostream>
using namespace std;
long long n;
char s[6] = {'Y', 'W', 'Q', 'B', 'S'};
long long e[6] = {100000000, 10000, 1000, 100, 10};
void work(long long x, char ch){
bool usedzero = false;
bool st = false;
for (int i=0; i<5; i++){
if(x / e[i]) {
work(x / e[i], s[i]);
if (e[i] == 100000000 && x % e[i] < 10000000) {
cout<<'a';
} // 十百千万都是相邻位,而亿和万之间不相邻,答案考虑 0
x %= e[i];
st = true;
usedzero = false;
} else {
if (!usedzero && st && x) {
cout<<'a';
usedzero = true;
}
}
}
if (x) cout<<(char)('a' + x);
cout<<ch;
}
int main()
{
cin>>n;
// 特判 0,很要命
if (!n) {
cout<<'a';
return 0;
}
bool usedzero = false;
bool st = false;
for (int i=0; i<5; i++){
if(n / e[i]) {
work(n / e[i], s[i]);
if (e[i] == 100000000 && n % e[i] < 10000000) {
cout<<'a';
}
n %= e[i];
st = true;
usedzero = false;
} else {
if (!usedzero && st && n){
cout<<'a';
usedzero = true;
}
}
}
if (n) cout<<(char)('a' + n)<<endl;
return 0;
}