华为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真实机试环境,非其他第三方平台模拟。
输入描述
输入有三个参数:
- 第一个参数是整数形式的进制N值,N值范围为大于等于2、小于等于35。
- 第二个参数为被减数字符串;
- 第三个参数为减数字符串。
有效的字符包括0-9以及小写字母a-z,字符串有效字符个数最大为100个字符,另外还有结尾的\0。
限制:
输入的被减数和减数,除了单独的0以外,不能是以0开头的字符串。
如果输入有异常或计算过程中有异常,此时应当输出-1表示错误。
输出描述
输出有2个。
其一为减法计算的结果,-1表示出错,0表示结果为整数,1表示结果为负数。
其二为表示结果的字符串。
用例
题目解析
- 首先,需要将输入的两个字符串转换为十进制数。
- 然后,进行减法运算,得到结果。
- 判断结果的正负性,如果结果为负数,输出-1和空字符串;如果结果为正数,输出0和结果的N进制表示。
- 如果输入有异常或计算过程中有异常,输出-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卷题目一样。多种语言解法,欢迎提供更好的解法。