其他分享
首页 > 其他分享> > 1044 火星数字 (20分)

1044 火星数字 (20分)

作者:互联网

1044 火星数字 (20分)  

火星人是以 13 进制计数的:

例如地球人的数字 29 翻译成火星文就是 hel mar;而火星文 elo nov 对应地球数字 115。为了方便交流,请你编写程序实现地球和火星数字之间的互译。

输入格式:

输入第一行给出一个正整数 N(<100),随后 N 行,每行给出一个 [0, 169) 区间内的数字 —— 或者是地球文,或者是火星文。

输出格式:

对应输入的每一行,在一行中输出翻译后的另一种语言的数字。

输入样例:

4
29
5
elo nov
tam
 

输出样例:

hel mar
may
115
13



代码讲解:这题要注意的细节是很多的,我是用c写的,第一你首先要想到,怎么去判别
我输入的是中文还是地球文,当然你可以使用字符数组,然后去慢慢去判别,然后再去
看是一位,还是俩位,这也太麻烦了,这写完得多少行代码才行啊,要利用scanf的返回值
去判断中文和地球文,判别之后还是要注意,它可能是一位的火星文,也可以是俩位的火星文
一定要注意,即便一位的火星文,也不一定就是低位的,因为高位火星文低位是零的情况下,
是不输入的,你注意看最后一个tam那个范例你就懂了。。。。所以情况你都要分清。。。



#include<stdio.h>
#include<string.h>
int main()
{
 char di[][5]={"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
 char gao[][5]={"tret","tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};
 int k;
 scanf("%d",&k);
 int e;
    char a[20];
    int flag; //判断是中文还是火星文的
    int i,j;
    int sum;
 while(k--)
 {
  sum=0;
  flag=scanf("%d",&e);
  if(flag==0)
  {
   gets(a);
   for(i=0;a[i]!=' '&&a[i]!='\0';i++); //判断是一位火星文,还是俩位的火星文
   if(a[i]==0) //是否是一位的火星文
   {
    for(i=0;i<13;i++) //看一位的火星文是否是低位火星文。。
    {
     if(strcmp(a,di[i])==0)
     break;
    }
    if(i!=13) //确定是否是低位火星文,是的话直接输出
    printf("%d\n",i);
    else //只有一位,但是高位火星文
    {
      for(j=0;j<13;j++)
     {
     if(strcmp(a,gao[j])==0)
     break;
     }
     printf("%d\n",j*13) ;
    }
   }
   else //俩位火星文的情况
   {
    a[i]='\0';
    for(j=0;j<13;j++) //高位的情况
    {
     if(strcmp(a,gao[j])==0)
     break;
    }
    sum+=j*13; //把高位的算出来
    i++;
    while(a[i]==' ')i++; //俩位之间不应只有一个空格,把中间的空格都去掉,防止误判
    for(j=0;j<13;j++) //找到低位的对应数字
    {
     if(strcmp(a+i,di[j])==0)
     break;
    }
    sum+=j; //把他相加
    
    
    printf("%d\n",sum); //结束
    
   }
   
   
  }
  else //输入的中文,求火星文
  {
   if(e/13!=0) //是否有高位
   {
   if(e%13!=0) //低位不为为0
   printf("%s %s\n",gao[e/13],di[e%13]);
   else //低位为0不需要输出低位了
   {
   printf("%s\n",gao[e/13]);
   }
      }
      else //没有高位只有低位的时候。
      printf("%s\n",di[e%13]);
   
  }
  
 }
 return 0;
}

标签:13,20,1044,int,di,gao,printf,火星
来源: https://www.cnblogs.com/bigageyuan/p/13914873.html