遇到编码难题。
问题是编写一个函数,该函数返回比N结尾的任意高的数字(以0结尾)。
我的解决方法是:
function solution(N) {
for (let n = N +1; n <= N + 10; n++) {
if (n % 10 === 0) return n;
}
}
答案 0 :(得分:4)
您可以划分并使用Math.ceil
:
const solution = (n) => Math.ceil((n+1)/10) * 10
console.log(solution(49))
console.log(solution(40))
console.log(solution(41))
console.log(solution(0))
console.log(solution(-1))
console.log(solution(-11))
答案 1 :(得分:3)
我认为这是最快的:
function solution(N) {
return 1000000000;
}
除非有反对的规则,否则这似乎是一个棘手的问题!
很有趣:
只有一种解决方法!为每个功能运行1到999999999之间的所有n
。我得到了这个结果:
@FrançoisHuppé解决方案:2.884秒
@Mark Meyer解决方案:3.25秒
@assoron解决方案:3.79秒
@Sharon S解决方案:8.824秒
var t = Date.now();
for(var n = 0; n < 1000000000; n++){
var res = solution1(n);
}
document.write('@François Huppé solution\'s: ' + ((Date.now() - t)/1000) + 'sec <br>');
var t = Date.now();
for(var n = 0; n < 1000000000; n++){
var res = solution2(n);
}
document.write('@Mark Meyer solution\'s: ' + ((Date.now() - t)/1000) + 'sec <br>');
var t = Date.now();
for(var n = 0; n < 1000000000; n++){
var res = solution3(n);
}
document.write('@assoron solution\'s: ' + ((Date.now() - t)/1000) + 'sec <br>');
var t = Date.now();
for(var n = 0; n < 1000000000; n++){
var res = solution4(n);
}
document.write('@Sharon S solution\'s: ' + ((Date.now() - t)/1000) + 'sec <br>');
function solution1(n) {
return 1000000000;
}
function solution2(n) {
return Math.ceil((n+1)/10) * 10;
}
function solution3(n) {
return n + (10 - n % 10);
}
function solution4(N) {
for (let n = N +1; n <= N + 10; n++) {
if (n % 10 === 0) return n;
}
}
答案 2 :(得分:2)
我只需将'0'
连接到末尾,然后转换为数字:
const solution = n => Number(n + '0')
您还可以忽略输入并返回最大可能的数字(最大可能的 input 为.9999e9,因此1e9将适用于所有输入)
const solution = n => 1e9;
答案 3 :(得分:2)
如果需要任意更大的10的倍数。 最简单的方法是将其乘以10。
const solution = n => n * 10
答案 4 :(得分:2)
没有数学,使用mod。
const solution = n => n + 10 - n % 10
console.log(solution(57))
console.log(solution(23))
console.log(solution(1))
console.log(solution(221))
console.log(solution(9000))
对于小于10 ^ 9的N,您可以随时添加一个if来捕获这些数字。
答案 5 :(得分:1)
由于没有人考虑过精度问题,因此可以合理地假设结果必须在安全整数内,因此我们可以简单地返回最大安全输入:
const safe = Number.MAX_SAFE_INTEGER-1
const solution = n => safe
console.log(solution(2))
请注意,结果是预先计算的,因此我们只需要从内存中加载常量并返回它即可。
答案 6 :(得分:0)
不确定是否需要使用负数,但是可以使用我认为的技巧,该技巧将为您提供一个比n大的下一个数字,该数字以0结尾:
function solution(number) {
var remainder = number % 10;
if(remainder === 0) {
return number + 10;
} else {
return number + (10 - remainder);
}
}
console.log(solution(42));
console.log(solution(50));
console.log(solution(105));
编辑:assoron的解决方案使用相同的逻辑,但是只是一个衬里。
答案 7 :(得分:0)
function solution(n)
{
return n % 10 ? n + (10 - n % 10) : n + 10;
}