一、题目描述 ⭐️
二、代码(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;
}