让我们用字母 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型
//根据Int型判断 各种输出
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
cin>>s;
int z[4];
for(int i=0;i<s.length();i++){
z[i]=s[i]-'0' ;
}
while(z[0]!=0){
cout<<"B";
z[0]--;
}
while(z[1]!=0){
cout<<"S";
z[1]--;
}
for(int i=0;i<z[2];i++){
cout<<i+1;
}
}
一开始还说怎么这么简单.....连想带写5 6分钟就写完了。
结果提交的时候发现好几个测试点没过,仔细一想之后发现忽略了 两位数一位数的情况........
吸取教训,一定想好了再动手写。
重新想了一下,直接取余求出百位十位个位,然后判断输出就可以了。
找了个想法差不多的实现了的代码直接贴上了,懒得重新写了......
#include <iostream>
using namespace std;
int main(){
int n, count = 0, ge = 0, shi = 0, bai = 0;
scanf("%d", &n);
while(n != 0){
if(count == 0){
ge = n % 10;
n /= 10;
count ++;
}
else if(count == 1){
shi = n % 10;
n /= 10;
count ++;
}
else{
bai = n % 10;
n /= 10;
}
}
if(bai != 0){
for(int i=0;i<bai;i++){
printf("%c", 'B');
}
}
if(shi != 0){
for(int j=0;j<shi;j++){
printf("%c", 'S');
}
}
if(ge != 0){
for(int k=0;k<ge;k++){
printf("%d", k+1);
}
}
printf("%c", '\n');
return 0;
}