编程题 7-23 币值转换【PAT】

文章目录

编程练习题目集目录

题目

输入一个整数(位数不超过 9 9 位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如 23108 23108 元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母 a − j a-j 顺序代表大写数字 0 − 9 0-9 ,用 S 、 B 、 Q 、 W 、 Y S、B、Q、W、Y 分别代表 拾、百、仟、万、亿。于是 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; }
本文是转载文章,点击查看原文
如有侵权,请联系 lx@jishuguiji.net 删除。