您的位置:首页 > 其它

【PAT】1006. 换个格式输出整数 (15)

2018-01-21 18:42 225 查看
题目

让我们用字母B来表示“百”、字母S表示“十”,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数。例如234应该被输出为BBSSS1234,因为它有2个“百”、3个“十”、以及个位的4。

输入格式:每个测试输入包含1个测试用例,给出正整数n(<1000)。

输出格式:每个测试用例的输出占一行,用规定的格式输出n。
输入样例1:
234

输出样例1:
BBSSS1234

输入样例2:
23

输出样例2:
SS123

代码
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using std::string;
using std::cin;
using std::cout;
using std::vector;
using std::reverse;
int main() {
int n;
cin >> n;

vector<int> data;

// 依次取出 个十百位 的数字
int div = 1;
while (true) {
int temp = n / div;
if (temp == 0) {
break;
}
data.push_back(temp % 10);
div *= 10;
}

reverse(data.begin(), data.end()); //反转后 以此存放百十个位

//for (int i : data
9246
) {
// cout << i;
//}

switch (data.size())
{
case 1:
// 只有个位
for (unsigned j = 0; j < data[0]; j++) {
cout << j + 1;
}
break;
case 2:
// 十位和个位
for (unsigned i = 0; i < 2; i++) {
if (i == 0) {
for (unsigned j = 0; j < data[0]; j++) {
cout << 'S';
}
}
else {
for (unsigned j = 0; j < data[1]; j++) {
cout << j + 1;
}
}
}
break;
case 3:
// 百位十位个位
for (unsigned i = 0; i < 3; i++) {
if (i == 0) {
for (unsigned j = 0; j < data[0]; j++) {
cout << 'B';
}
}
else if (i == 1) {
for (unsigned j = 0; j < data[1]; j++) {
cout << 'S';
}
}
else {
for (unsigned j = 0; j < data[2]; j++) {
cout << j + 1;
}
}
}
break;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: