(pat乙級1006)
讓我們用字母 B 來表示“百”、字母 S 表示“十”,用 12…n 來表示不爲零的個位數字 n(<10),換個格式來輸出任一個不超過 3 位的正整數。例如 234 應該被輸出爲 BBSSS1234,因爲它有 2 個“百”、3 個“十”、以及個位的 4。
輸入格式:
每個測試輸入包含 1 個測試用例,給出正整數 n(<1000)。
輸出格式:
每個測試用例的輸出佔一行,用規定的格式輸出 n。
輸入樣例 1:
234
輸出樣例 1:
BBSSS1234
輸入樣例 2:
23
輸出樣例 2:
SS123
c++代碼:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
string word[10]={"0","1","2","3","4","5","6","7","8","9"};
int main(){
int n,a=0;
cin>>n;
string s="";
int num=0; //記錄當前是哪一位(個-->十-->百)
while(n!=0){
a=n%10; //得到當前n的個位數
if(num==0){ //是個位
for(int i=a-1;i>=0;i--)s=s+word[i+1];num++;
}
else if(num==1){ //是十位
for(int i=0;i<a;i++)s=s+"S";num++;
}
else if(num==2){ //是百位
for(int i=0;i<a;i++)s=s+"B";num++;
}
n=n/10;
}
reverse(s.begin(),s.end()); //結果字符串反向
cout<<s;
return 0;
}
注意:
因爲是不斷n/10從n的個位向前依次得到n的每一位,所以結果字符串是反向的。調用alogrithm下的reverse(s.begin(),s.end())把字符串s反向後輸出。