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));
}
}
}
关注公众号”算法宝贝“获取更多题目解析