1044. 火星数字(20)

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, 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
//水题,分类情况。
#include <stdio.h>
#include <stdlib.h>
#include"string.h"
char ch1[13][5]={"tret","jan","feb","mar","apr","may","jun","jly","aug","sep", "oct","nov","dec"};
char ch2[12][4]={"tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};
void deal1(char ch[])
{
    int number=0;
    int i;
    for(i=0;ch[i]!='\0';i++){
        number=number*10+ch[i]-'0';
    }
    int dight1=number/13;
    int dight2=number%13;
    if(dight1)
        printf("%s%c",ch2[dight1-1],dight2==0?'\n':' ');
    if(dight2)
        printf("%s\n",ch1[dight2]);
    if(dight1==0&&dight2==0)
        printf("tret\n");

}
void deal2(char ch[])
{
    int i;
    if(strlen(ch)==3){
        for(i=0;i<=11;i++){
            if(strcmp(ch,ch2[i])==0){
                printf("%d\n",(i+1)*13);
                return;
            }
    }
        for(i=1;i<=12;i++){
            if(strcmp(ch,ch1[i])==0){
                printf("%d\n",i);
                return;
            }
    }
}
   else if(strlen(ch)==4){
        printf("%d\n",0);
        return;
}

   else{
            char dight1[10];
            char dight2[10];
            int number=0;
            strcpy(dight1,ch);
            dight1[3]='\0';
            strcpy(dight2,ch+4);
            for(i=0;i<=11;i++){
                if(strcmp(dight1,ch2[i])==0){
                        number=(i+1)*13;
                        break;
                }
            }
            for(i=0;i<=12;i++){
                if(strcmp(dight2,ch1[i])==0){
                   number+=i;
                   break;
                }
            }

            printf("%d\n",number);
}

}

int main()
{

    char number[10];
    int count,i;
    scanf("%d",&count);
    getchar();
    for(i=1;i<=count;i++){
        gets(number);
        if(number[0]>='0'&&number[0]<='9')
            deal1(number);
        else
            deal2(number);
    }
    return 0;
}


火星数字是一种特殊的进制表示法,通常用于模拟不同文化背景下的计数方式。以下是关于“1044”在火星数字中的含义及应用的相关信息: --- 火星人采用的是13进制计数系统。地球上的十进制数字需要转换成对应的火星文字来表示。 ### 十进制转火星数字规则 - **低位**:从右往左第一位代表个位数(范围为0~12),对应火星文如下: - `tret` (0), `jan` (1), `feb` (2), ..., `dec` (12) - **高位**:第二位及以上每增加一位乘以13的幂次方,其值也用火星文表示: - 对应的文字依次为:`tam`, `hel`, ... 因此,“1044”的具体含义可以通过将其拆分为高低两位分别计算得出。 #### 方法一:直接分解与翻译 将十进制数1044除以13取余得到每一位数值,并映射至相应的火星单词表。 如对于1044, - 商 = floor(1044 / 13) = 80 - 余数 = 1044 % 13 = 4 查表可知: - 高位商80再次被转化为十三进制形式即6*13^1 + 2*13^0=`apr tam` - 低位余数4对应于marsian word:`jul` 最终结果组合起来就是:“apr tam jul”。 #### 方法二:借助程序实现自动化转化 可以利用编程语言快速完成批量数据处理工作。下面给出一个简单的Python脚本来演示这一过程: ```python def decimal_to_mars(n): low_map = ['tret', 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jly', 'aug', 'sep', 'oct', 'nov', 'dec'] high_map = ['', 'tam', 'hel', 'maa', 'huh', 'tou', 'kes', 'hei', 'elo', 'syy', 'lok', 'mer', 'jou'] if n == 0: return "tret" mars_high, remainder = divmod(n, 13) result = "" if mars_high > 0: result += high_map[mars_high] if remainder != 0: result += " " if remainder != 0 or n < 13: result += low_map[remainder] return result.strip() print(decimal_to_mars(1044)) # 输出:"apr tam jul" ``` 以上两种方法都可以帮助理解并解决有关火星数字的具体应用场景问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值