【浙江大學PAT真題練習乙級】1006 換個格式輸出整數 (15分) 真題解析

題目描述

  讓我們用字母 B 來表示“百”、字母 S 表示“十”,用 12...n來表示不爲零的個位數字 n<10(<10),換個格式來輸出任一個不超過 3 位的正整數。例如 234 應該被輸出爲 BBSSS1234,因爲它有 2 個“百”、3 個“十”、以及個位的 4

輸入格式

  每個測試輸入包含 1 個測試用例,給出正整數 n(<1000)。

輸出格式

  每個測試用例的輸出佔一行,用規定的格式輸出 n。

輸入樣例 1:

234

輸出樣例 1

BBSSS1234

輸入樣例 2

23

輸出樣例 2

SS123

思路解析

  這裏其實就是希望我們將輸入數字的個位、十位、百位都給找出來,並且需要驗證都是幾,用輸出不同符號的方式驗證。但是在C++實現的時候,我發現調用<stdio.h>下的printf輸出string格式的數據的時候報錯了,cout並不會,後來百度了一下,理由如下:

  printf輸出字符串是針對char *的,換言之,printf只能輸出c語言中的內置數據,string不是c語言內置數據。更深入的來說:如:string s = "中國";s這個string類型的對象並非單單隻有字符串,其內還有許多用於操作的函數,於是&s並非字符串“中國”的首地址,而是s這個對象的首地址。因此借用stringc_str()成員方法返回當前字符串的首字符地址。

  在Python實現的時候整除是兩個斜槓//

C++實現

#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;

int main(){
    int input;
    string output = "";
    scanf("%d", &input);
    int B_num = input / 100;
    for(int i=0; i<B_num;i++){
        output = output+"B";
    }
    int S_num = (input - B_num*100)/10;
    for(int i=0; i<S_num; i++){
        output = output+"S";
    }
    int G_num = (input - B_num*100 - S_num*10);
    for(int i=1;i<G_num+1;i++){
        output=output + to_string(i);
    }
    printf("%s", output.c_str());
}

Python實現

input_data =  int(input())
output_data = ""
B_num = input_data // 100
for i in range(B_num):
    output_data = output_data +"B"
S_num = (input_data -B_num*100)//10
for i in range(S_num):
    output_data = output_data +"S"
G_num = input_data - B_num*100 - S_num*10
for i in range(G_num):
    output_data = output_data + str(i+1)
print(output_data)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章