PAT 乙级 1006.换个格式输出整数 C++/Java
1006 换个格式输出整数 (15 分)
让我们用字母 B
来表示“百”、字母 S
表示“十”,用 12...n
来表示不为零的个位数字 n
(n < 1000),换个格式来输出任一个不超过 3 位的正整数。例如 234
应该被输出为 BBSSS1234
,因为它有 2 个“百”、3 个“十”、以及个位的 4。
输入格式:
每个测试输入包含 1 个测试用例,给出正整数 n(<)。
输出格式:
每个测试用例的输出占一行,用规定的格式输出 n。
输入样例 1:
234
输出样例 1:
BBSSS1234
输入样例 2:
23
输出样例 2:
SS123
C++实现:
分析:
给出的数字至多只有3位数,所以可以创建一个大小为3的数组,分别存放百位、十位、个位。最后利用循环输出就可以了
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int n; 7 int arr[3]; 8 cin >> n; 9 10 for (int i = 2; i >= 0; --i) 11 { 12 arr[i] = n % 10; 13 n /= 10; 14 } 15 16 for (int i = 0; i < arr[0]; ++i) 17 { 18 cout << "B"; 19 } 20 for (int i = 0; i < arr[1]; ++i) 21 { 22 cout << "S"; 23 } 24 for (int i = 1; i <= arr[2]; ++i) 25 { 26 cout << i; 27 } 28 return 0; 29 }
Java实现:
思路1:
同C++做法:创建一个长度为3的数组,分别存放百位、十位、个位。
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner input = new Scanner(System.in); 6 int[] arr = new int[3]; 7 int n = input.nextInt(); 8 for (int i = 2; i >= 0; --i) { 9 arr[i] = n % 10; 10 n /= 10; 11 } 12 for (int i = 0; i < arr[0]; ++i) { 13 System.out.print("B"); 14 } 15 for (int i = 0; i < arr[1]; ++i) { 16 System.out.print("S"); 17 } 18 for (int i = 1; i <= arr[2]; ++i) { 19 System.out.print(i); 20 } 21 } 22
思路2:
对输入的数字n进行分辨得出:百位 [ a ]、十位 [ b ]、个位 [ c ]。
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner input = new Scanner(System.in); 6 int n = input.nextInt(); 7 int a = 0, b = 0, c = 0; 8 if (n >= 100) { 9 a = n / 100; 10 b = (n % 100) / 10; 11 c = n % 10; 12 } 13 if (n >= 10 && n < 100) { 14 b = n / 10; 15 c = n % 10; 16 } 17 if (n >= 1 && n < 10) { 18 c = n; 19 } 20 for (int i = 0; i < a; ++i) { 21 System.out.print("B"); 22 } 23 for (int i = 0; i < b; ++i) { 24 System.out.print("S"); 25 }28 for (int i = 1; i <= c; ++i) {31 System.out.print(i); 32 } 33 } 34 }