1044 火星數字 20分

2021-10-05 19:45:54 字數 1536 閱讀 4865

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

地球人的 0 被火星人稱為 tret。 地球人數字 1 到 12 的火星文分別為:jan, feb, mar, apr, may, jun,

jly, aug, sep, oct, nov, dec。 火星人將進製以後的 12 個高位數字分別稱為:tam, hel, maa,

huh, tou, kes, hei, elo, syy, lok, mer, jou。 例如地球人的數字 29 翻譯成火星文就是 hel

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

輸入格式: 輸入第一行給出乙個正整數 n(<100),隨後 n 行,每行給出乙個 [0, 169) 區間內的數字 ——

或者是地球文,或者是火星文。

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

輸入樣例:429

5elo nov

tam輸出樣例:

hel mar

may115

13

思路分析:本題是借鑑柳神的**思想;

1.題目給出的可能是火星文,也可能是地球文。所以用getline輸入字串。如果是地球文,則將字串用stoi函式轉化為數字,然後執行fun1(),轉化為火星文;在這裡注意stoi函式的用法,可能出現不能識別的錯誤。通常有如下兩種可能:沒有新增該函式對應的標頭檔案: #include< cstring > 。如果你發現自己沒有新增這個標頭檔案,請將這個標頭檔案新增上再編譯,如果編譯器還是報錯,請接著往下看。

編譯器的問題。我用的是codeblocks,解決方法是settings->compiler->c++11(勾選),然後就可以正常進行編譯執行了。

2.fun1():傳入的值是string轉int後的結果,因為數字最大不超過給68,所以最多有兩位火星文。如果t/13不等於0,說明有高位,輸出rocess[t/13];如果輸出了高位,並且低位不等於0,此時輸出空格;如果有低位,此時輸出integer[t/13];注意數字0,要直接輸出tret。所以在最後判斷時,加一句t==0,並將integer[0]賦值為tret。

3.fun2():s1,s2分別用來儲存火星文的高位和低位。讓後下標從1到12遍歷兩個陣列,如果integer陣列中有和s1,s2相等的,說明低位等於j,並將j賦值給t2;如果process中有和s1相等的,說明高位有值,將j賦值給t1,最後輸出t1*13+t2;

#include

using namespace std;

string integer[13]

=;string process[13]

=;string s;

int len;

void

fun1

(int t)

//地球文轉火星文

void

fun2()

cout<13+t2;

}int

main()

return0;

}

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 區間內的數字 或者是地球文,或者是火星文。...