题目链接
题目描述
让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。
输入格式:
每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。
输出格式:
每个测试用例的输出占一行,用规定的格式输出 n。
输入样例 1:
234
输出样例 1:
BBSSS1234
输入样例 2:
23
输出样例 2:
SS123
题目大意
给一个不超过1000的整数
- 百位的数字是几就输出几个B
- 十位的数字是几就输出几个S
- 个位的数字是几就输出从1到这个数字
解题思路
因为给出的数字不超过1000,也就是最多就是三位数,假设给出的数字为n
,可以用a b c
三个变量分别存储个位十位百位,然后根据不同位置的数字做不同的转化
- 获得个位的方法是让
n对10取余
,取出的余数就是个位的数字
a = n%10;
//相当于取个位的数字
- 获得十位的方法是让
n除以10后对10取余
,取出的余数为十位的数字
b = n/10%10;
/*对于任意一个数,先对除以10,相当于取这个数出区个位的其他数字
对于234/10 = 23
(因为int对于小数来说234/10=23.4的做法为直接舍去小数点后面的数字,不存在四舍五入的情况)
再对10去余数,就是23%10=3,取出的就是十位的数字
*/
- 对于百位,因为最多是三位数,可以直接对
n除以100
,得到的值就是百位
c = n/100;
注意,这里不需要判断小于三位的数字究竟需不需要必须是三位,如果是两位(10~99),则百位的值为0,也不会输出B,十位数同理
题解
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a = n%10; //个位
int b = n/10%10; //十位
int c = n/100; //百位
for(int i=0;i<c;i++) cout<<"B"; //根据百位的数字输出B
for(int i=0;i<b;i++) cout<<"S"; //根据十位的数字输出S
for(int i=1;i<=a;i++) cout<<i; //根据个位的数字顺序输出
}