PTA乙级刷题日志---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


思路:

 这道题之前的都有类似的,主要是取数,我的思路是

  • 首先统计有几位数。
    • 因为数字是int型的,所以可以通过除以10,能够除几次为0便是几位数。但是这里的数是不超过三位数的,所以说可以用判断在(1-10),(11-99),(100,999)中哪个范围,并定义一个变量标记位数。
  • 然后依次取得各个位上的数。
    • 取数采用取余的方法,用一个循环依次从最低位取到最高位并将它们依次存入有三个空间的数组。
  • 最后以数组中元素的个数作为循环的次数依次输入对应的字符或数字。

代码:

#include <stdio.h>
int main(){
  int n;
  int number[3] ={0,0,0};
  int i=0;
  scanf("%d",&n);
  if(n>999||n<1) return 0;
  
  //判断范围
  int k;//取余数时最开始的除数
  if(n>0&&n<10) k=1;
  else k =10;
  
  //取数
  while(n!=0){
  //一位数
  if(k==1) {
    number[0]=n;
    break;
  }
    number[i++]=n%k;
    n=n/10;
  }
  
  //输出
  for(i=0;i<number[2];i++){
    printf("B");
  }
  for(i=0;i<number[1];i++){
    printf("S");
  }
  for(i=1;i<=number[0];i++){
    printf("%d",i);
  }
}

 


打卡:2018.10.16(5/5)

猜你喜欢

转载自blog.csdn.net/weixin_38854519/article/details/83142886