拆分自然数:纯while实现 (Part 1 - 思路)
2010-09-14 13:47:57 来源:WEB开发网我先问大家一个问题,写一个函数按顺序输出所有的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();
}
}
更多精彩
赞助商链接