题目描述
让我们用字母 B
来表示“百”、字母 S
表示“十”,用 12...n
来表示不为零的个位数字 n
( < 10 ) (<10)(<10),换个格式来输出任一个不超过 3
位的正整数。例如 234
应该被输出为 BBSSS1234
,因为它有 2
个“百”、3
个“十”、以及个位的 4
。
输入格式:
每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。
输出格式:
每个测试用例的输出占一行,用规定的格式输出 n。
输入样例 1:
234 • 1
输出样例 1:
BBSSS1234 • 1
输入样例 2:
23
输出样例 2:
SS123
思路解析
这里其实就是希望我们将输入数字的个位、十位、百位都给找出来,并且需要验证都是几,用输出不同符号的方式验证。但是在C++
实现的时候,我发现调用<stdio.h>
下的printf
输出string
格式的数据的时候报错了,cout
并不会,后来百度了一下,理由如下:
printf
输出字符串是针对char *
的,换言之,printf
只能输出c
语言中的内置数据,string
不是c
语言内置数据。更深入的来说:如:string s = "中国";
,s
这个string
类型的对象并非单单只有字符串,其内还有许多用于操作的函数,于是&s
并非字符串“中国”的首地址,而是s
这个对象的首地址。因此借用string
中c_str()
成员方法返回当前字符串的首字符地址。
在Python
实现的时候整除是两个斜杠//
。
C++实现
#include<stdio.h> #include<iostream> #include<string> using namespace std; int main(){ int input; string output = ""; scanf("%d", &input); int B_num = input / 100; for(int i=0; i<B_num;i++){ output = output+"B"; } int S_num = (input - B_num*100)/10; for(int i=0; i<S_num; i++){ output = output+"S"; } int G_num = (input - B_num*100 - S_num*10); for(int i=1;i<G_num+1;i++){ output=output + to_string(i); } printf("%s", output.c_str()); }
Python实现
input_data = int(input()) output_data = "" B_num = input_data // 100 for i in range(B_num): output_data = output_data +"B" S_num = (input_data -B_num*100)//10 for i in range(S_num): output_data = output_data +"S" G_num = input_data - B_num*100 - S_num*10 for i in range(G_num): output_data = output_data + str(i+1) print(output_data)