JavaScript PAT乙级题解 1044 火星数字

这篇具有很好参考价值的文章主要介绍了JavaScript PAT乙级题解 1044 火星数字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

火星人是以 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

 题解如下:

20/20

这题大概就是个十进制与十三进制的相互转换,有一个要注意的点是0的处理,输入0能否正确输出tret;输入的如果是13的倍数的话不需要输出末位的tret

然后做完了看别人的题解才发现,其实题干的输入范围规定在了0-169之间,意思就是说转换为十三进制时最多只有两位,其实就用不着专门写递归进行转换文章来源地址https://www.toymoban.com/news/detail-842498.html

/**
 * 2024/03/21
 * 20/20
 */
const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let num = 0;
let rows = [];
rl.on("line", function (data) {
  if (num === 0) {
    num = Number(data);
  } else {
    rows.push(data);
    if (rows.length === num) {
      rows.forEach((el) => {
        if (!isNaN(Number(el))) {
          console.log(tenTo(el, []));
        } else {
          console.log(toTen(el));
        }
      });
    }
  }
});

let mars = [
  "tam",
  "hel",
  "maa",
  "huh",
  "tou",
  "kes",
  "hei",
  "elo",
  "syy",
  "lok",
  "mer",
  "jou",
];
let earth = [
  "tret",
  "jan",
  "feb",
  "mar",
  "apr",
  "may",
  "jun",
  "jly",
  "aug",
  "sep",
  "oct",
  "nov",
  "dec",
];

/**
 * 十进制转十三进制
 * @param data
 * @param resArr
 * @returns {string}
 */
function tenTo(data, resArr) {
  let front = Math.floor(data / 13);
  let behind = data % 13;
  if (front === 0) {
    resArr.push(earth[behind]);
  } else if (front < 13) {
    resArr.push(mars[front - 1]);
    resArr.push(earth[behind]);
  } else {
    tenTo(front, resArr);
    resArr.push(earth[behind]);
  }
  // 如果最后一位是tret,则不显示,但是如果只有tret就显示(case1)
  if (resArr[resArr.length - 1] === "tret" && resArr.length !== 0) {
    resArr.pop();
  }
  return resArr.join(" ");
}

/**
 * 十三进制转十进制
 * @param data
 * @returns {number}
 */
function toTen(data) {
  let strArr = data.split(" ");
  if (mars.includes(strArr[strArr.length - 1])) {
    strArr.push("tret");
  }
  let numArr = [];
  for (let i = 0; i < strArr.length; i++) {
    if (earth.indexOf(strArr[i]) !== -1) {
      numArr.push(earth.indexOf(strArr[i]));
    } else if (mars.indexOf(strArr[i]) !== -1) {
      numArr.push(mars.indexOf(strArr[i]) + 1);
    }
  }
  let res = 0;
  for (let i = 0; i < numArr.length; i++) {
    let a = 1;
    for (let j = 0; j < i; j++) {
      a *= 13;
    }
    res += numArr[numArr.length - i - 1] * a;
  }
  return res;
}

到了这里,关于JavaScript PAT乙级题解 1044 火星数字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【华为OD机考 统一考试机试C卷】火星文计算2(C++ Java JavaScript Python C语言)

    目前在考C卷,经过两个月的收集整理, C卷真题已基本整理完毕 抽到原题的概率为2/3到3/3, 也就是最少抽到两道原题。 请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。 另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。

    2024年04月12日
    浏览(50)
  • 「PAT乙级真题解析」Basic Level 1097 矩阵行平移 (问题分析+完整步骤+伪代码描述+提交通过代码)

    乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。 PAT (Basic Level) Practice 1097 矩阵行平移 题设给定了明确的步骤, 要求按照给定方式进行\\\"平移\\\"操作, 然后计算各行元素的和并输出。 \\\"计算各行元素之和\\\"以及

    2023年04月10日
    浏览(95)
  • 【JavaScript】leetcode链表相关题解

    💎个人主页: 阿选不出来 💎个人简介: 大三学生,热爱Web前端,随机掉落学习碎片 💎目前开发的专栏: JS 🍭Vue🍭React🍭 💎祝愿今天的你比昨天更加博识了! 链表的官方定义:链表是一种物理存储单位上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针

    2024年02月07日
    浏览(31)
  • LeetCode 第384 场周赛题解(JavaScript版)

    废话不多说,我们来直接看题目!没参与本次周赛的小伙伴也可以先点进去自己试试看!第 384 场周赛 - 力扣(LeetCode) 好的家人们,这个第一题,我们也是必须拿下的好吧,一道非常简单的模拟送分题,它的意思是, 让我们把矩阵中,值为-1的数,变为它所在这一列最大的

    2024年02月22日
    浏览(40)
  • javascript数字转中文大写

    有时候业务需要做大写【一二三四五六七八九十】的标题,那对于js普通的数据结构排序是按【0123456789】。所以我们需要做一些数字的转换,实现小写转大写才能满足业务需求。

    2024年02月11日
    浏览(49)
  • HTML JavaScript 数字变化特效

    案例一:上下滚动 案例二:本身变化

    2024年01月22日
    浏览(38)
  • 题解 洛谷P1088 [NOIP2004 普及组] 火星人——【C/C++】

    人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加

    2024年01月25日
    浏览(36)
  • JavaScript中 将阿拉伯数字转为汉字

    在JavaScript中,可以使用以下代码将阿拉伯数字转换为汉字: 这段代码中,我们首先定义了两个数组: digits 和 units ,分别代表数字和单位。然后,我们将输入的数字转换成字符串,并逐个处理每一位数字。如果当前数字为0,我们不需要输出汉字,但需要考虑上一个数字是否

    2024年02月16日
    浏览(51)
  • JavaScript 判断是否为数字的几种方式

    喜欢博主的文章,欢迎关注、点赞👍、收藏⭐️、留言📝支持,谢谢大家 js判断是否为数字的方式很多: typeof 、 instanceof 、 Number.isNumber parseInt 、 parseFloat isNaN 、 isFinite Number.isNaN 、 Number.isFinite 正则表达式 终极方案 我们逐一介绍,希望能帮到大家。 typeof 判断值是不是基

    2023年04月10日
    浏览(65)
  • 在JavaScript中将字符串转换为数字的7种方法

    原始地址:https://dev.to/sanchithasr/7-ways-to-convert-a-string-to-number-in-javascript-4l 使用parseInt() parseInt()解析字符串并返回一个整数。可以包含空格。只返回第一个数字。 然而,该方法有一个限制。如果解析的是小数,它将四舍五入为最近的整数值,并将该值转换为 字符串 。一个可能

    2024年02月05日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包