zoukankan      html  css  js  c++  java
  • PAT(B) 1044 火星数字(Java)进制转换

    题目链接: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加个位
    				}
    			}
    		}
    	}
    }
    

    提交结果

    提交结果

  • 相关阅读:
    Java文件的 In 与 Out 的相对性
    EBS 生产环境并发管理器重启步骤详解经验啊
    HDOJ1285 确定比赛名次(拓扑排序)
    对线性回归、逻辑回归、各种回归的概念学习
    一个截屏工具制作的全过程记录——如何使用“拿来主义”
    免费的响应式bootstrap管理员后台界面主题 Charisma
    挖掘管理价值:企业软件项目管理实战
    浏览器自动填充表单导致网页样式丢失
    「译」开发者如何提升和推销自己
    xcopy的一次误用及解决办法
  • 原文地址:https://www.cnblogs.com/wowpH/p/11687432.html
Copyright © 2011-2022 走看看