• 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加个位
    				}
    			}
    		}
    	}
    }
    

    提交结果

    提交结果

  • 相关阅读:
    饿了么 PostgreSQL 优化之旅
    kubernetes 滚动更新发布及回滚
    kubernetes yaml
    mongodb安装
    node.js安装
    linux输出换行
    把token放入请求头
    $.ajaxSetup
    js前端读取文件内容
    v-echarts安装
  • 原文地址:https://www.cnblogs.com/wowpH/p/11687432.html
Copyright © 2020-2023  润新知