WEB开发网
开发学院网页设计JavaScript 拆分自然数:纯while实现 (Part 1 - 思路) 阅读

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

 2010-09-14 13:47:57 来源:WEB开发网   
核心提示:我先问大家一个问题,写一个函数按顺序输出所有的4位二进制数(即:0000, 0001, 0010, 0011, ..., 1110, 1111),拆分自然数:纯while实现 (Part 1 - 思路),你会怎么写? 如果把固定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();
    }
}

1 2  下一页

Tags:拆分 自然数 while

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接