题目链接:1044 火星数字 (20 point(s))

题目描述

火星人是以 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) 区间内的数字 —— 或者是地球文,或者是火星文。

输出格式

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

输入样例

7
0
5
13
52
168
jou
mer nov

输出样例

tret
may
tam
huh
jou dec
156
154

Java代码

/**********************************************************************************
Submit Time Status Score Problem Compiler Run Time User
8/6/2019, 22:04:46 Accepted 20 1044 Java (openjdk) 80 ms wowpH
**********************************************************************************/
import java.io.BufferedReader;
import java.io.InputStreamReader; public class Main {
private static int transform(String[] arr, String number) {// 火星文转成地球文
for (int i = 0; i < arr.length; ++i) {
if (arr[i].contentEquals(number)) { // 找到
return i; // 返回下标
}
}
return -1; // 未找到,返回越界
} public static void main(String[] args) throws Exception {
String[] ones = { "tret", "jan", "feb", "mar", "apr", "may", "jun", "jly",
"aug", "sep", "oct", "nov", "dec" }; // 个位
String[] tens = { "tret", "tam", "hel", "maa", "huh", "tou", "kes", "hei",
"elo", "syy", "lok", "mer", "jou" }; // 十位
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine()); // 数字个数
for (int i = 0; i < n; ++i) {
String[] number = br.readLine().split(" "); // 每行的数字
char ch = number[0].charAt(0); // 获取第一个字符串的第一个字符
if (ch >= 48 && ch <= 57) { // 如果是数字,说明是地球文
int num = Integer.parseInt(number[0]); // 转成int型
if (0 == num) { // 如果是0,输出"tret"
System.out.println("tret");
} else { // 不是0
int a = num / 13; // 十位
int b = num % 13; // 个位
if (0 == a) { // 十位为0
System.out.print(ones[b]); // 输出个位的火星文
} else { // 十位不为0
System.out.print(tens[a]); // 输出十位的火星文
if (b > 0) { // 个位不为0
System.out.print(" " + ones[b]);// 输出空格和个位的火星文
}
}
System.out.println(); // 换行
}
} else { // 如果是字母,说明是火星文
if (1 == number.length) { // 火星文只有一位
if (transform(ones, number[0]) >= 0) {// 个位
System.out.println(transform(ones, number[0]));
} else { // 十位
System.out.println(transform(tens, number[0]) * 13);// ×13
}
} else { // 火星文有两位
int num = transform(tens, number[0]) * 13
+ transform(ones, number[1]);
System.out.println(num); // 十位乘以13加个位
}
}
}
}
}

提交结果

PAT(B) 1044 火星数字(Java)进制转换的更多相关文章

  1. PAT 乙级 1044 火星数字 (20 分)

    1044 火星数字 (20 分) 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, j ...

  2. POJ 1220 大数字的进制转换,偷下懒,用java

    题意为进制转换,Java的大数类就像是作弊 import java.math.BigInteger; import java.util.Scanner; public class Main { pub ...

  3. Java进制转换, 数据类型, 运算符

    1:进制转换 转换规则: 先把数据的每一位上的系数乘以对应基数的次幂(低位从零开始),然后相加即可 十进制到其他进制 规则:除基取余,直到商为0,最后将余数反转 十进制到二进制: 除2取余,直到商为0 ...

  4. 流程控制 if while for 已及数字类型 进制转换

    一:if 语句 语法一:ifif 条件: code1 code1 code1 语法二:if ...else ... if 条件: code1 code1 code1else: code1 code1 ...

  5. java进制转换(无视正负数的差别)

    最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤其是对于负数这一方面. 下面和大家分享一下,这里只写了十进制到二进制的转换,其实都是同样的道理 public class Test1 { pub ...

  6. Java 进制转换(二进制(负),八进制,十进制,十六进制),位运算、逻辑运算(2)

    负数的二进制表现形式:其实就是该数的绝对值取反+1. 进制转换(二进制,八进制,十进制,十六进制),原理解析 十六进制的表现形式: (2)(与.异或.左移.右移.三元运算符)

  7. 初学java进制转换方面补充学习

    进制转换: 基础: ​ 二进制用的数为:0/1 ​ 八进制用的数为:0/1/2/3/4/5/6/7 ​ 十进制用的数为:0/1/2/3/4/5/6/7/8/9 ​ 十六进制用的数为:0/1/2/3/4 ...

  8. pat 1044.火星数字 Java版

    个人网站:https://www.lingluan.xyz 火星人是以13进制计数的: 地球人的0被火星人称为tret. 地球人数字1到12的火星文分别为:jan, feb, mar, apr, ma ...

  9. PAT Basic 1044 火星数字 (20 分)

    火星人是以 进制计数的: 地球人的 被火星人称为 tret. 地球人数字 到 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov ...

随机推荐

  1. Windows 实例远程桌面报错“没有远程桌面授权服务器可以提供许可证”

    参考阿里云帮助文档: https://help.aliyun.com/knowledge_detail/40859.html?spm=5176.10695662.1996646101.searchcl ...

  2. 三大框架 之 Struts2

    目录 Struts2 Struts2简介 Struts2框架的作用 常见web层的框架 web框架特点 Struts2基本使用 Struts2执行流程 Struts2配置 struts2的加载顺序 P ...

  3. CheatEngine查看PE header

    先打开进程,炉石传说. 然后选择MemoryViewer 在MemoryViewer界面,Tools菜单,然后选择Dissect PE headers 然后查看mono.dll的信息 0x357A0是 ...

  4. Java TreeSet,Collections使用

    一.创建TreeSet实例 public static void main(String[] args) { TreeSet set = new TreeSet(); set.add("C& ...

  5. keepalived非争抢机制不生效【原创】

    故障现象:俩台服务器设置了keepalived非争抢机制,但是发现优先级高的服务器还是会优先获取vip 利用tcpdump抓包发现只有其中一台服务器,没有另一台 tcpdump -i eth0 vrr ...

  6. 手动安装sublimeText3插件

    就在今天下午,我花了一个小时的时间安装sublime3插件stylus,就是为了让stylus文件能够高亮显示.网上找了很多方法,可以通过package control安装,然而,我的sublime ...

  7. c代码审查软件

    1. Coccinelle http://coccinelle.lip6.fr/

  8. Python带参数的函数装饰器

    # -*- coding: utf-8 -*- # author:baoshan # 带参数的函数装饰器 def say_hello(country): def wrapper(func): def ...

  9. grib2文件格式说明

    GRIB是一种二进制编码的名称,用于加工资料的传输和交换,GRIB编码的分析或预报产品是由一系列八位组构成的连续比特流组成.在GRIB2中编码资料主要分为9段.    0段——指示段八位组序号    ...

  10. 算法习题---5.5集合栈计算机(Uva12096)*****

    一:题目 对于一个以集合为元素的栈,初始时栈为空. 输入的命令有如下几种: PUSH:将空集{}压栈 DUP:将栈顶元素复制一份压入栈中 UNION:先进行两次弹栈,将获得的集合A和B取并集,将结果压 ...