来源 https://pintia.cn/problem-sets/994805260223102976/problems/994805318855278592

作者 CHEN, Yue

单位 浙江大学

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

pa2.1讲义(换个格式输出整数)(1)

PAT乙级-1006 换个格式输出整数

让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。

输入格式:

每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。

输出格式:

每个测试用例的输出占一行,用规定的格式输出 n。

输入样例 1:

234

输出样例 1:

BBSSS1234

输入样例 2:

23

输出样例 2:

SS123

代码

#include <stdio.h> #include <string.h> /** * 输出百、十、个 * w 表示位,0 个位,1 十位,2百位 * gs表示个数 * */ void printBSG(int w, int gs) { //0不用,S十位,B个位 char c[3] = "0SB"; if (w == 0) { //个位的输出方案 for (int i = 1; i <= gs; i ) { printf("%d", i); } } else if (w > 0) { //百位和十位的输出方案 for (int i = 0; i < gs; i ) { printf("%c", c[w]); } } } int main() { //读入4个数字,小于1000,最大999 char num[4]; scanf("%s", num); /** * 方法一: **/ //如果个数为1位,则直接按照个位的输出方案,输出n到0的数字 //num[0] - '0' 将char转为int的方法 if (strlen(num) == 1) { printBSG(0, num[0] - '0'); } //2位数,则先输出十位,再输出个位 else if (strlen(num) == 2) { printBSG(1, num[0] - '0'); printBSG(0, num[1] - '0'); } //3位数,则分别输出百位,再输出十位,再输出个位 else if (strlen(num) == 3) { printBSG(2, num[0] - '0'); printBSG(1, num[1] - '0'); printBSG(0, num[2] - '0'); } /** * 方法二: * 如果位数更多,则可以使用循环,调用printBSG函数 **/ /* //最大的下边索引 int maxIndex = strlen(num) - 1; for (int i = maxIndex; i >= 0; i--) { int index = maxIndex - i; printBSG(i, num[index] - '0'); } */ return 0; }

提交结果

pa2.1讲义(换个格式输出整数)(2)

提交结果

,