【问题标题】:Finding Gapful number in javascript在 javascript 中查找 Gapful 数字
【发布时间】:2020-02-13 19:48:09
【问题描述】:

如果一个数字至少有 3 位数长并且可以被第一个和最后一个数字串在一起形成的数字整除,则该数字是有间隙的。 符合此描述的最小数字是 100。第一个数字是 1,最后一位为 0,形成 10,即 100 的因数。因此, 100 是有缺口的。

创建一个接受数字 n 并返回最接近的 gapful 的函数 编号(包括它自己)。如果有 2 个有间隙的数字是 与 n 等距,返回较小的。

例子 gapful(25) ➞ 100

缺口(100) ➞ 100

缺口(103) ➞ 105

所以为了解决这个问题,我编写了从给定数字循环到大于该数字的代码,并找出它是否是

function getFrequency(array){
    var i=array
    while(i>=array){
        let a=i.toString().split('')
        let b=a[0]+a[a.length-1]
        b= +b
        if(i%b==0) return i
        i++
    }
}
console.log(getFrequency(103))

这很好,但是如果间隙数字小于函数中传递的数字怎么办? 就像如果我通过 4780 答案是 4773 那么在我的逻辑中我如何检查同时小于和大于通过的数字?

我只循环查找大于函数中提供的数字的数字

【问题讨论】:

  • 可以使用递归函数

标签: javascript


【解决方案1】:

您可以在减法和加法之间交替。从 0 开始,然后检查 -1,然后检查 +1,然后检查 -2,然后检查 +2,等等:

const gapful = (input) => {
  let diff = 0; // difference from input; starts at 0, 1, 1, 2, 2, ...
  let mult = 1; // always 1 or -1
  while (true) {
    const thisNum = input + (diff * mult);
    const thisStr = String(thisNum);
    const possibleFactor = thisStr[0] + thisStr[thisStr.length - 1];
    if (thisNum % possibleFactor === 0) {
      return thisNum;
    }
    mult *= -1;
    if (mult === 1) {
      diff++;
    }
  }
};
console.log(
  gapful(100),
  gapful(101),
  gapful(102),
  gapful(103),
  gapful(104),
  gapful(105),
  gapful(4780),
);

【讨论】:

    【解决方案2】:

    您可以使用单独的函数,一个用于检查数字是否为 gapful 数字,另一个用于获取左右值并选择最接近的数字。

    function isGapful(n) {
        if (n < 100) return false;
        var temp = Array.from(n.toString());
        return n % (temp[0] + temp[temp.length - 1]) === 0;    
    }
    
    function getClosestGapful(n) {
        var left = n,
            right = n;
    
        while (!isGapful(right)) right++;
    
        if (n < 100) return right;
    
        while (!isGapful(left)) left--;
    
        return n - left <= right - n
            ? left
            : right;
    }
    
    console.log(getClosestGapful(25));   //  100
    console.log(getClosestGapful(100));  //  100
    console.log(getClosestGapful(103));  //  105
    console.log(getClosestGapful(4780)); // 4773 

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多