题目
输入一个整数(位数不超过 9 9 9 位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如 23108 23108 23108 元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母 a − j a-j a−j 顺序代表大写数字 0 − 9 0-9 0−9,用 S 、 B 、 Q 、 W 、 Y S、B、Q、W、Y S、B、Q、W、Y 分别代表 拾、百、仟、万、亿。于是 23108 23108 23108 元应被转换输出为“cWdQbBai”元。
输入格式
输入在一行中给出一个不超过9位的非负整数。
输出格式
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例
813227345
输出样例
iYbQdBcScWhQdBeSf
输入样例
6900
输出样例
gQjB
题解
解题思路
首先输入一个数字,然后创建三个数组,一个存对应数字,一个存对应单位,一个存结果。对数字不断取余,根据对应的数字和单位数组,将转换结果存入结果数据中,最后逆序输出即可。
完整代码
#include<iostream>
using namespace std;
int main(void)
{
char Number[10] = {
'a','b','c','d','e','f','g','h','i','j' }; // 存数字
char Unit[10] = {
0,0,'S','B','Q','W','S','B','Q','Y' }; // 存单位,为将下标与位数对应,前两个单元存0
char RESULT[17]; // 存结果,最多存9个数字,8个单位
int n, k = 0, bitNumber = 0, cur, pre; // k:当前存入数组数据的下标;pre:前一位
cout << "请输入一个正整数:"; // 提交时注释此行
cin >> n;
if (!n)
{
cout << Number[0]; // 注意若输入数为0,输出a
return 0;
}
while (n) // 从低位到高位取位判定
{
cur = n % 10; // cur:取当前最低位数字
n /= 10; // 注意:n及时除10
bitNumber++; // bitNumber:当前位数
if (cur) // 如果当前位数字不为0
{
if (bitNumber > 1) // 如果不为个位,存单位
RESULT[k++] = Unit[bitNumber];
RESULT[k++] = Number[cur]; // 存数字
}
else // 如果当前位数字为0
{
if (bitNumber == 5) // 若为第五位万位
RESULT[k++] = Unit[bitNumber]; // 必存单位
else if (pre != 0 && bitNumber != 4 && bitNumber != 1) // 若不为万位,千位,个位,且前一位不为0
RESULT[k++] = Number[cur]; // 存当前的数字0
}
pre = cur; // 注意及时保存当前位
}
for (int i = k - 1; i >= 0; i--) // 倒序输出结果
cout << RESULT[i];
return 0;
}