1006 換個格式輸出整數——C++實現
阿新 • • 發佈:2018-11-24
題目
1006 換個格式輸出整數 (15 point(s))
讓我們用字母
B
來表示“百”、字母S
表示“十”,用12...n
來表示不為零的個位數字n
(<10),換個格式來輸出任一個不超過 3 位的正整數。例如234
應該被輸出為BBSSS1234
,因為它有 2 個“百”、3 個“十”、以及個位的 4。輸入格式:
每個測試輸入包含 1 個測試用例,給出正整數 n(<1000)。
輸出格式:
每個測試用例的輸出佔一行,用規定的格式輸出 n。
輸入樣例 1:
234
輸出樣例 1:
BBSSS1234
輸入樣例 2:
23
輸出樣例 2:
SS123
演算法
這個題目難度倒是不大,無論通過什麼方法都能解決。
方法1是從C的角度出發,建立對應的陣列。
方法2是從string類的角度出發,判斷輸入是幾位數字,這裡要先將數字轉化為字串,用到了一個很好用的to_string(),這個函式要包含在<string>中。
方法3是柳婼大神的思路,顯然使用while將各位數字取出來,再輸出也是一個好方法。
思路
方法1
//pat1006V1 #include <stdio.h> int main(){ int value,i,bai,shi,ge; //value save the user's input char BaiArray[][10]={"B","BB","BBB","BBBB","BBBBB","BBBBBB","BBBBBBB","BBBBBBBB","BBBBBBBBB"}; char ShiArray[][10]={"S","SS","SSS","SSSS","SSSSS","SSSSSS","SSSSSSS","SSSSSSSS","SSSSSSSSS"}; char GeArray[][10]={"1","12","123","1234","12345","123456","1234567","12345678","123456789"}; scanf("%d",&value); ge=value%10; shi=value/10%10; bai=value/100; // printf("%d %d %d\n",bai,shi,ge); for(i=0;i<9;i++) if(bai==i+1) printf("%s",BaiArray[i]); for(i=0;i<9;i++) if(shi==i+1) printf("%s",ShiArray[i]); for(i=0;i<9;i++) if(ge==i+1) printf("%s",GeArray[i]); return 0; }
方法2
#include <iostream> #include <string> using namespace std; int main(){ int n; cin>>n; char c[2]={'S','B'}; string str=to_string(n); if(str.length() ==1){ for(int i=1;i<=n;i++) cout<<i; } if(str.length() ==2){ for(int i=0;i<n/10;i++) printf("%c",c[0]); for(int i=1;i<=n%10;i++) cout<<i; } if(str.length() ==3){ for(int i=0;i<n/100;i++) printf("%c",c[1]); for(int i=0;i<n%100/10;i++) printf("%c",c[0]); for(int i=1;i<=n%100%10;i++) cout<<i; } return 0; }
方法3
#include <iostream>
#include <string>
using namespace std;
int main(){
int n,i=0; cin>>n;
int b[3]={0};
while(n){
b[i++]=n%10; //依次取出最後一位數字
n/=10;
}
for(int j=0;j<b[2];j++) cout<<"B";
for(int j=0;j<b[1];j++) cout<<"S";
for(int j=0;j<b[0];j++) cout<<j+1;
return 0;
}