华为OD机试真题 - N进制减法 (D卷,100分)

2024华为OD机试真题 - N进制减法 (D卷,100分)

题目描述

主管期望你实现一个基于字符串的N进制的减法。

需要对输入的两个字符串按照给定的N进制进行减法操作,输出正负符号和表示结果的字符串。

目录

题目描述

输入描述

输出描述

用例

题目解析

Java算法源码

JS算法源码

Python算法源码

C算法源码

华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分。总分为400分,150分钟,机试是在牛客考试,练习的时候也可以在牛客网练习,提前熟悉操作

https://ac.nowcoder.com/acm/contest/5652/K

点击上方链接进入牛客练习界面,可以自定义题目,自定义输入、输出等等,华为OD真实机试环境,非其他第三方平台模拟。

输入描述

输入有三个参数:

  1. 第一个参数是整数形式的进制N值,N值范围为大于等于2、小于等于35。
  2. 第二个参数为被减数字符串;
  3. 第三个参数为减数字符串。

有效的字符包括0-9以及小写字母a-z,字符串有效字符个数最大为100个字符,另外还有结尾的\0。

限制:

输入的被减数和减数,除了单独的0以外,不能是以0开头的字符串。

如果输入有异常或计算过程中有异常,此时应当输出-1表示错误。

输出描述

输出有2个。

其一为减法计算的结果,-1表示出错,0表示结果为整数,1表示结果为负数。

其二为表示结果的字符串。

用例

题目解析

  1. 首先,需要将输入的两个字符串转换为十进制数。
  2. 然后,进行减法运算,得到结果。
  3. 判断结果的正负性,如果结果为负数,输出-1和空字符串;如果结果为正数,输出0和结果的N进制表示。
  4. 如果输入有异常或计算过程中有异常,输出-1和空字符串。

JavaScript算法源码

const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => {
  const [n, shou, gong] = line.split(" ");
  console.log(getResult(parseInt(n), shou, gong));
});
 
function getResult(n, shou, gong) {
  if (n < 2 || n > 35) return -1;
  if (!valid(shou, n) || !valid(gong, n)) return -1;

  shou = parseInt(shou, n);
  gong = parseInt(gong, n);

  const diff = Number(Math.abs(shou - gong)).toString(n);

  return `${shou >= gong ? 0 : 1} ${diff}`;
}

function valid(str, n) { 
  if (str.startsWith("0")) {
    return str === "0";
  }
 
  const regExp = /[^a-z0-9]/;
  if (regExp.test(str)) return false;
 
  if (str.length > 100) return false;
 
  for (let c of str) {
    if (/^[0-9]$/.test(c)) {
      if (c - 0 >= n) return false;  
    } 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试题库D卷 文章被收录于专栏

2024年5-11月份考的D卷,不用再看AB卷,CD卷题目一样。多种语言解法,欢迎提供更好的解法。

全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务