Tags标签 网战地图
当前位置: 主页 > 网页设计 > JavaScript >

拆分自然数:纯while实现(Part 1 - 思路)

2014-06-09 21:56 [JavaScript] 来源于:
导读:我先问大家一个问题,写一个函数按顺序输出所有的4位二进制数(即:0000, 0001, 0010, 0011, ..., 1110, 1111),你会怎么写? 如果把固定4位变成任意n位,你又

我先问大家一个问题,写一个函数按顺序输出所有的4位二进制数(即:0000, 0001, 0010, 0011, ..., 1110, 1111),你会怎么写? 如果把固定4位变成任意n位,你又会怎么写?我知道那些会写高精度加法的人会跳出来说,就做一个高精度的二进制加法,Array的每一位保存二进制数的每一位,每次在末尾加1,然后让高精度加法自己处理进位,最后打印结果。老实说,我也做过这种蠢事,直到我在高中的一次竞赛中看到了一种比较巧妙的做法:(我最近一年都是写JavaScript,所以我在这里就用JavaScript写了)

function main(n) {
 var array = new Array(n);
 var i = 0;

 var write = function() {
  console.log(array.join(''));
 };

 var scan = function() {
  return array[i] == 1;
 };

 var step = function() {
  array[i] = 1;
 };

 var fill = function() {
  while (i < n) {
   array[i] = 0;
   i++;
  }
  i--;
 };

 fill();
 write();
 while (true) {
  while (i >=0 && scan()) {
   i--;
  }
  if (i < 0) {
   break;
  }
  step();
  i++;
  fill();
  write();
 }
}

(编辑:)

本文标签:
网友评论

栏目列表

推荐文章