SOURCE

console 命令行工具 X clear

                    
>
console
var findMatch = (str, num) =>{
  var xPos = [];//占位符位置
  var allPos = [];//所有字符的数组
  for (var i = 0, l = str.length; i < l; i++) {
    if (str.charAt(i) === 'X') {
      xPos.push(i);
    }
    allPos.push(str[i]);
  }
  var result = [];
  var fn = (pos) =>{
		// 将对应位置的字符换为循环的数字    
    for (var i = 0; i < pos.length; i++) {
      allPos[xPos[i]] = pos[i];
    }
    var target = +allPos.join('');
    if (target % num === 0) {
      result.push(target);
    }
  }
  deep(fn ,xPos.length);
  // loop(fn ,xPos.length);
  // createNestedLoop(fn, xPos.length)();
  return result.length;
}

// 按照给定深度构造多层循环
// 实现1
var deep = (fn, deeplen) =>{
  var rs = null;
  var args = [];
  var content = 'var trueArgs = [];for(var i =0;i<args.length;i++){trueArgs[i]=eval(args[i])}rs = fn(trueArgs);';
  for (var i = 0; i < deeplen; i++) {
    args.push(`iter${i}`);
    content = `for ( var iter${i} = 0; iter${i}<=9; iter${i}++){ ${content} }`;
  }
  new Function('fn', 'args', content)(fn, args);
  return rs;
}

// 实现2
function loop(fn, n, args = []) {
  if (n === 0) {
    rs = fn.call(null, args);
    return rs;
  }

  for (let i = 0; i <= 9; i++) {
    loop(fn, n - 1, args.concat(i));
  }
}

// 实现3
let createNestedLoop = (fn, deepLength) => {
    let createClosure = (closure, layer) => {
        return (arr) => {
            for (let i = 0; i <= 9; i++) {
                arr[layer] = i
                closure(arr)
            }
        }
    }
    
    for (let i = deepLength; i > 0; i--) {
        fn = createClosure(fn, i - 1)
    }
    
    return () => {
        fn(new Array(deepLength).fill(0))
    }
}


getDom = (id) => document.getElementById(id)

var cal = getDom('cal')
var str = getDom('str');
var num = getDom('num');
var matchRs = getDom('match');
cal.onclick = () => {
  matchRs.innerText=findMatch(str.value, num.value);
}
<div class="p-entry">
  <p>
    易老师购买了一盒饼干,盒子中一共有k块饼干,但是数字k有些数位变得模糊了,看不清楚数字具体是多少了。易老师需要你帮忙把这k块饼干平分给n个小朋友,易老师保证这盒饼干能平分给n个小朋友。现在你需要计算出k有多少种可能的数值
    <br>
    <strong>
      输入描述:
    </strong>
  </p>
  <blockquote>
    <p>
      输入包括两行:
    </p>
    <p>
      第一行为盒子上的数值k,模糊的数位用X表示,长度小于18(可能有多个模糊的数位)
    </p>
    <p>
      第二行为小朋友的人数n
    </p>
  </blockquote>
  <p>
    <strong>
      输出描述:
    </strong>
  </p>
  <blockquote>
    <p>
      输出k可能的数值种数,保证至少为1
    </p>
  </blockquote>
  <p>
    <strong>
      输入例子:
    </strong>
  </p>
  <blockquote>
    <p>
      9999999999999X
      <br>
      3
    </p>
  </blockquote>
  <p>
    <strong>
      输出例子:
    </strong>
  </p>
  <blockquote>
    <p>
      4
    </p>
  </blockquote>
</div>
<br/>
<p><b>演示:</b></p>
<div id='result'>
  <input type="text" id='str' value='23X7X3X' /><br/>
  <input type="text" id='num' value='32'/><br/>
  <button id='cal'>计算</button>
  <div>结果:<span id="match"></span></div>
<div>