来源 https://pintia.cn/problem-sets/994805260223102976/problems/994805318855278592
作者 CHEN, Yue
单位 浙江大学
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
PAT乙级-1006 换个格式输出整数
让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。
输入格式:每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。
输出格式:每个测试用例的输出占一行,用规定的格式输出 n。
输入样例 1:
234
BBSSS1234
23
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;
}
提交结果
提交结果
,