相信很多小伙伴刷算法题,都是用力扣。但是,力扣是核心代码模式,是不需要处理输入、输出的,只需要直接返回值就行。笔试、面试的时候,不一定是核心代码模式,也可能是ACM模式。如果没有了解过JavaScript的输入输出可能就寄了。(本人就试过突然ACM模式笔试,后面不知道怎么输入输出,直接重操旧业,用C++来做题😂)
祝看到这篇文章并且在找工作的,顺顺利利拿到心仪的
offer
。(包括本人🐶)JavaScript的ACM模式会有两种:
V8模式
、Nodejs模式
。
console.log();
这个就没啥好说的了,学JavaScript还不认识这个的话,就太尴尬了。
read_line()
)最多读取个字符,当还未达到1024个时如果遇到回车或结束符,提前结束。也有可能是
readline()
。牛客ACM模式就是readline()
。
\color{red}最重要的一个输入方法,可以通过该方法得到所有情况的输入,后面讲的其他输入方法,有可能没有。比如牛客的ACM模式,使用后面的输入,都会报错:xxx is not defined
read_line()
返回输入的一行,字符串形式。需要通过split
、parseInt
等方法来得到真正的输入。(这里确实比C++那些要麻烦得多)
题目来源:OJ在线编程常见输入输出练习场J
\color{red}题目来源是牛客,但是练习是在赛码上练的,因为牛客提供的输入API少很多。
let line;
while(line = read_line()) {
let nums = line.split(' ');
let a = +nums[0]; // 将字符串转为数字
let b = +nums[1];
console.log(a + b);
}
let t;
while(t = +read_line()) {
while(t--) {
let line = read_line();
let [a, b] = line.split(' ').map(Number);
console.log(a + b);
}
}
let line;
while(line = read_line()) {
let [n, ...nums] = line.split(' ').map(Number);
if(n === 0) {
break;
}
let sum = 0;
for(let i = 0; i < n; i++) {
sum += nums[i];
}
console.log(sum);
}
let t;
while(t = +read_line()) {
console.log()
while(t--) {
let [n, ...nums] = read_line().split(' ').map(Number)
let sum = 0;
for(let i = 0; i < n; i++) {
sum += nums[i];
}
console.log(sum);
}
}
readInt()
)根据平台的不同,有可能不提供该接口,比如牛客网。
A+B(1)
let a;
let b;
while((a = readInt()) && (b = readInt())) {
console.log(a + b);
}
正所谓,术业有专攻,很明显,有的时候直接用readInt()
会比read_line()
方便很多。(当然前提是你做题的平台有提供这个接口才行)
readDouble
)和
readInt()
基本一致。
let a;
let b;
while((a = readDouble()) && (b = readDouble())) {
console.log(a + b);
}
最多读取n个字符,当没有达到n个时,如果遇到回车或结束符,会提前结束。
gets(n)
)因为read_line()
只能读取1024个字符,所以如果输入长度大于1024个字符的字符串的话,就轮到gets(n)
函数大显神通了。
let n;
while(n = +read_line()) {
let str = gets(n);
console.log(str + ' - clz');
}
如果题目备注字符串的长度范围为1到10000。 那么读取输入应该是
gets(10000)
Nodejs输入主要有三大步骤:
readline
模块
readline.createInterface()
,创建一个readline的接口实例
line
事件,事件处理函数的参数就是输入的行
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function (line) {
//
});
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function (line) {
let nums = line.split(' ');
if(nums && nums.length == 2) {
// 这里加上这个条件是因为在赛码平台上,输入结束还会触发一次,line是空行
// 吐个槽:牛客输入结束不会再触发一次。真服了,每个平台都有自己的一套规则
let a = +nums[0];
let b = +nums[1];
console.log(a + b);
}
});
输出指定位数使用toFixed(n)
函数(四舍五入)
let a = 1 / 6;
console.log(a.toFixed(3)); // 0.167