码迷,mamicode.com
首页 > 其他好文 > 详细

PAT Basic 1044

时间:2018-08-11 17:44:57      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:int   return   pat   using   scanf   stream   substr   cin   getch   

1044 火星数字

火星人是以 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
  题解:这道题并不难,但是坑点挺多的,比如说他可能直接输出一个高位的火星数字,这时候不需要输出低位的火星数字等等,详见代码。

代码如下:

 1 #include<iostream>
 2 #include<string>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int n, k = 1, m, num = 0 ,ok = 0;
 9     string c, d;
10     string a[13] = { "tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
11     string b[13] = { "0", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou" };
12     scanf("%d",&n);
13     getchar();
14     while(n--){
15         getline(cin,c);
16         num = 0;
17         k = 1;
18         ok = 0;
19         if(c[0] <= 9 && c[0] >= 0){
20             for( int i = c.length() - 1; i >=0; i--){
21                 num += ( c[i] - 0)*k;
22                 k *= 10;
23             }
24             if( num < 13 )  cout<<a[num]<<endl;
25             else{
26                 if( num%13 != 0)
27                     cout<<b[num/13]<<" "<<a[num%13]<<endl;
28                 else 
29                     cout<<b[num/13]<<endl;
30             }
31         }
32         else if( c.length() < 5 ){
33             for( int i = 0; i < 13; i++){
34                 if(a[i] == c){
35                     ok = 1;
36                     cout<<i<<endl;
37                     break;
38                 }
39             }
40             if(!ok){
41                 for( int i = 1; i <13; i++){
42                     if( b[i] == c){
43                         ok = 1;
44                         cout<<i*13<<endl;
45                         break;
46                     }
47                 }
48             }
49         }
50         else{
51             d = c.substr(0,3);
52             for(int i = 1; i < 13; i++){
53                 if(b[i] == d){
54                     num += i*13;
55                     break;
56                 }
57             }
58             d = c.substr(4,c.length()-3);
59             for( int i = 0; i < 13; i++){
60                 if( a[i] == d){
61                     num += i;
62                     break;
63                 }
64             }
65             cout<<num<<endl;
66         }
67     }
68     return 0; 
69 }

 

 

PAT Basic 1044

标签:int   return   pat   using   scanf   stream   substr   cin   getch   

原文地址:https://www.cnblogs.com/yxp400/p/9460389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!