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

编程练习题目集目录

题目

  输入一个整数(位数不超过 9 9 9 位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如 23108 23108 23108 元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母 a − j a-j aj 顺序代表大写数字 0 − 9 0-9 09,用 S 、 B 、 Q 、 W 、 Y S、B、Q、W、Y SBQWY 分别代表 拾、百、仟、万、亿。于是 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;
}