2025-02-18 学习记录--C/C++-PTA 7-23 币值转换

发布于:2025-02-19 ⋅ 阅读:(121) ⋅ 点赞:(0)

一、题目描述 ⭐️

在这里插入图片描述

二、代码(C语言)⭐️

#include <stdio.h>

// 获取对应的大写字母
char getUppercase(int index) {
    char uppercaseArr[10] = {' ','S','B','Q','W','S','B','Q','Y',' '};
    return uppercaseArr[index];
}

// 获取对应的小写字母
char getLowercase(int digit) {
    char lowercaseArr[10] = {'a','b','c','d','e','f','g','h','i','j'};
    return lowercaseArr[digit];
}

int main() {
    int N, // 输入的不超过 9 位的非负整数
        originN, // 输入的整数起始值
        remainder, // 整数分割后的各位数 从个位开始(由右往左)
        i = 0, // 计数器:根据i获取 第i位数 对应的 大写字母(由右往左)
        lastRemaindeer = 0, // 前一次十进制取余所得值
        aCount = 0; // 出现小写字母a的个数
    // 计数器:计算resultsArr数组中所存字符总数
    int count = 0;
    // 最终结果的倒序,封装成数组
    char resultsArr[100] = {};

    // 输入
    scanf("%d",&N);
    originN = N;

    // 处理 N = 0 的特殊情况
    if(N == 0) {
        printf("a\n");
        return 0;
    }

    // (1)、取得整数分割后的各位数 从个位开始(由右往左)例如:23108 得到 8 0 1 3 2
    while(N != 0) {
        remainder = N % 10; // (3)、取得整数分割后的各位数 从个位开始(由右往左)例如:23108 得到 8 0 1 3 2

        // 因为 0 不展示大写字母
        if(remainder != 0) {
            resultsArr[count] = getUppercase(i); // 1、先将大写字母放进resultsArr结果数组中去
            count++; // 2、resultsArr数组中所存字符总数加1
        }

        // 若上一次取余的值lastRemaindeer等于0 且 当前取余的值remainder等于0,则不将小写字母放入数组
        if(lastRemaindeer != 0 || remainder != 0) {
            resultsArr[count] = getLowercase(remainder); // 3、再将小写字母放进resultsArr结果数组中去
            count ++; // 4、resultsArr数组中所存字符总数加1
        }

        // 更新 lastRemaindeer 的值,更新条件为:remainder != 0
        if(remainder != 0)lastRemaindeer = remainder;


        i++; // 更新大写字母的索引

        N /= 10; // (2)、取得整数分割后的各位数 从个位开始(由右往左)例如:23108 得到 8 0 1 3 2
    }

    // 当前输出到第几位数
    int printNum = 1;
    // 5、倒序输出 resultsArr 结果数组中的字符
    for(int j= count - 1; j >= 0; j--) {

        if(resultsArr[j] != ' ') {
            // 处理中间有多个0的情况:若 当前位是a 且 下一位是a,则表示 有连续0出现
            if(resultsArr[j] == 'a' && resultsArr[j - 1] == 'a') {
                aCount++;
                // 在第一个出现0的地方 判断是否输出字母 W
                if(aCount == 1) {
                    // 如果 输入的整数起始值 包含 十万、百万、千万,且当连续出现时,需将 万 打印出来
                    if(originN >= 100000 && originN < 100000000 ) {
                        printf("W");
                    }
                }
            } else if(resultsArr[j] == 'a' && resultsArr[j - 1] != 'a') {
                // 连续0的情况截止,只需输出一个0(即小写字母a),并重置aCount为0
                printf("%c",'a');
            } else {
                printf("%c",resultsArr[j]);
            }

        }

        // 当前输出到的位数加1
        printNum ++;
    }

    return 0;
}

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到