1044. 火星數字
阿新 • • 發佈:2019-02-16
火星人是以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)區間內的數字 —— 或者是地球文,或者是火星文。
輸出格式:
對應輸入的每一行,在一行中輸出翻譯後的另一種語言的數字。
輸入樣例:4 29 5 elo nov tam輸出樣例:
hel mar may 115 13
演算法:
- 演算法開始。
- 用兩個字串陣列分別儲存0-13的火星文和進位後的火星文。
- 讀取正整數N。
- 如果i>=N,則跳到第九步。
- 以字串形式讀入一行輸入。
- 如果這是地球文,則轉化為整型。對此數字除以13取餘,倒序輸出對應字串數組裡的字串。
- 如果這是火星文,則首先判斷有幾個火星文,然後與字串陣列進行匹配,加和轉化為地球文輸出。
- 回到第四步。
- 演算法結束。
#include <stdio.h> #include <string.h> #include <ctype.h> int main(void) { char s[10]; char single_digit[][5] = { "tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec" }; char tens[][4] = { "tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou" }; int n, i, j, temp, decade; scanf_s("%d", &n); getchar(); for (i = 0; i < n; i++) { gets_s(s, 10); if (isdigit(s[0])) { temp = 0; for (j = 0; s[j] != '\0'; j++) { temp = temp * 10 + s[j] - '0'; } if (temp > 12) { decade = temp / 13; temp = temp % 13; if (temp) { printf("%s", tens[decade - 1]); putchar(' '); puts(single_digit[temp]); } else { puts(tens[decade - 1]); } } else { puts(single_digit[temp]); } } else { if (strlen(s) > 4) { for (j = 0; strstr(s, tens[j]) == NULL; j++); temp = 13 * (j + 1); for (j = 0; strstr(s + 4, single_digit[j]) == NULL; j++); temp += j; } else { for (j = 0; j < 13 && strstr(s, single_digit[j]) == NULL; j++); if (j < 13) { temp = j; } else { for (j = 0; strstr(s, tens[j]) == NULL; j++); temp = (j + 1) * 13; } } printf("%d\n", temp); } } return 0; }