1044 火星數字 20分

2021-10-04 12:08:02 字數 1841 閱讀 8151

火星人是以 13 進製計數的:

例如地球人的數字29翻譯成火星文就是hel mar;而火星文elo nov對應地球數字115。為了方便交流,請你編寫程式實現地球和火星數字之間的互譯。

輸入第一行給出乙個正整數 n(<100),隨後 n 行,每行給出乙個 [0, 169) 區間內的數字 —— 或者是地球文,或者是火星文。

對應輸入的每一行,在一行中輸出翻譯後的另一種語言的數字。

4295

elo nov

tam

hel mar

may115

13

(1)如何解決輸入輸出問題:輸入字串輸出數字,輸入數字輸出字串?

輸入中既有字串又有數字,輸入方式肯定選擇字串。若直接對給出的輸入進行模擬,情況比較複雜,由於數字範圍在0~168,不算大,可以將所有情況一一列出。用乙個字串陣列mp記錄查詢得到的結果;建立乙個低位陣列low存放0~12的火星文,建立乙個進製陣列high存放13的0~12倍。

(2)如何通過字串找到對應的數字?

如果想要將數字轉化為火星文,可以直接建立乙個字串陣列numtostr[170],用來記錄0~168所對應的字串,而想要將字串轉化為數字,可以使用map對映mapstrtonum,下標為字串,值為數字。

對數字進行處理時,需要考慮以下情況:

只有個位數0~12,十位為0:就是tret~de

十位為0~12,個位為0(即為13的倍數):就是tret~jou(個位不用輸出tret,如13只輸出tam)

for(int i=0;i<13;i++)
個位和十位均不為0:可以直接通過十位的火星文拼接上個位的火星文

for(int i=1;i<13;i++)

}

**如下:

#include#include#include#include#includeusing namespace std;

string low[13]=;

string high[13]=;

mapstrtonum;//火星文轉化為數字

string numtostr[170];//數字轉化為火星文:0~169

void init()

for(int i=1;i<13;i++)

} }int main()

} for(int i=0;i(1)scanf()中%*表示忽略掉乙個輸入項,如本題中%*c表示會略掉乙個字元型的輸入項。格式字串的一般形式為:

%[*][輸入資料寬度][長度]型別,其中有方括號的項為任選項。

(2)在c++中,將數字轉化為string型的字串可以選擇庫:

庫定義了三種類:istringstream、ostringstream和stringstream,分別用來進行流的輸入、輸出和輸入輸出操作。另外,每個類都有乙個對應的寬字符集版本。本題使用stringstream,因為每個轉換都要涉及到輸入和輸出操作。注意,使用string物件來代替字元陣列。這樣可以避免緩衝區溢位的危險。而且,傳入引數和目標物件的型別被自動推導出來,即使使用了不正確的格式化符也沒有危險。

stringstream通常是用來做資料轉換的。

#include #include #include using namespace std;

int main()

(3)string型別的字串輸入輸出只能用cin和cout(要加標頭檔案#include和#include)。

1044 火星數字 (20 分)

1044 火星數字 20 分 火星人是以 13 進製計數的 地球人的 0 被火星人稱為 tret。地球人數字 1 到 12 的火星文分別為 jan,feb,mar,apr,may,jun,jly,aug,sep,oct,nov,dec。火星人將進製以後的 12 個高位數字分別稱為 tam,hel,m...

1044 火星數字 20 分

火星人是以 13 進製計數的 地球人的 0 被火星人稱為 tret。地球人數字 1 到 12 的火星文分別為 jan,feb,mar,apr,may,jun,jly,aug,sep,oct,nov,dec。火星人將進製以後的 12 個高位數字分別稱為 tam,hel,maa,huh,tou,kes,...

1044 火星數字 20 分

火星人是以 13 進製計數的 例如地球人的數字29翻譯成火星文就是hel mar 而火星文elo nov對應地球數字115。為了方便交流,請你編寫程式實現地球和火星數字之間的互譯。輸入第一行給出乙個正整數 n 100 隨後 n 行,每行給出乙個 0,169 區間內的數字 或者是地球文,或者是火星文。...