PAT乙级1006题目详解

1006 换个格式输出整数 (15分)

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

输入格式:

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

输出格式:

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

输入样例 1:

234
     
    

输出样例 1:

BBSSS1234
    
   

输入样例 2:

23
     
    

输出样例 2:

SS123

题目解析:
题目给的数最多是三位数,我们需要把每一个数都单独提出来。拿题目给的数举个例子,234,4就是输出1234,3就是输出3个S,2就是输出2个B。

由于最多只有三位,对每一个数进行操作,得到每一个数相应的要输出的字符串,然后放到list集合中,由于先计算的个位,所以list中字符串的顺序为个位、十位、百位,所以list倒序输出就可以了。

如何得到每一个字符串,我采用的switch,要给的数每提出一位来,count++,用case来决定是从1到n,还是几个S,或者几个B。还要定义一个空字符串用来接收每次得到的字符串。

AC代码:

import java.util.ArrayList;
import java.util.Scanner;
public class I006 {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        int N=s.nextInt();//得到输入的数
        //用来存放得到的要输出的字符串
        ArrayList<String> list=new ArrayList<>();
        //用来计数
        int count=0;
        while(N!=0){//N=0,表明最后一位已经得到,循环完毕
            String str="";//空字符串用来存放得到的字符串,每次循环都要清空
            int num=N%10;
            count++;
            switch (count){
                //表明得到的是个位数字
                case 1:
                    for(int i=1;i<=num;i++){
                        str+=i;
                    }
                    list.add(str);
                    break;
                //得到十位数字    
                case 2:
                    for(int i=0;i<num;i++){
                        str+='S';//S连起来
                    }
                    list.add(str);
                    break;
                //得到百位数字    
                case 3:
                    for(int i=0;i<num;i++){
                        str+='B';//B连起来
                    }
                    list.add(str);
                    break;
            }
            N=N/10;
        }
        //倒序输出list集合中所有的字符串
        for(int i=list.size()-1;i>=0;i--){
            System.out.print(list.get(i));
        }
    }
}

关注公众号”算法宝贝“获取更多题目解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值