cocos creator基礎-(三十一)超大數值計算


處理超出正常范圍的整數,使用數組分段保存數據,逐項相加,滿足條件就進位,需要注意數組下標越界
// large_number.js
// new  構造函數來模擬一個類

// 初始化的[0, 0, 0, 0, 0, 0, 9] --> 9 000 000 000 000 000 000 // [0, 999]
function _ajust_bit_value(bit_array) {
    // 處理進位,注意越界
    for (var i = 0; i < bit_array.length; i++) {
        while (bit_array[i] >= 1000) {
            bit_array[i] -= 1000;
            if (i + 1 >= bit_array.length) {
                this.value_set.push(0);
            }
            bit_array[i + 1] = bit_array[i + 1] + 1;
        }
    }
}

function large_number(value_array) {
    this.value_set = value_array;
    _ajust_bit_value(this.value_set);
}



// 當前的對對象 + rhs 賦值給當前這個對下崗
large_number.prototype.large_add = function(rhs) {
    // 補齊位數
    while (this.value_set.length < rhs.value_set.length) {
        this.value_set.push(0);
    }

    for (var i = 0; i < rhs.value_set.length; i++) {
        this.value_set[i] = this.value_set[i] + rhs.value_set[i];
    }

    _ajust_bit_value(this.value_set);
}

function _format_num(num) {
    if (num < 10) {
        return "00" + num;
    } else if (num < 100) {
        return "0" + num;
    } else {
        return "" + num;
    }
}

large_number.prototype.format_string = function() {
    var str_num = "" + this.value_set[this.value_set.length - 1];
    for (var i = this.value_set.length - 2; i >= 0; i--) {
        str_num = str_num + " " + _format_num(this.value_set[i])
    }

    return str_num
}

// test
/*var num1 = new large_number([0, 0, 0, 0, 0, 0, 9]);
var num2 = new large_number([0, 0, 0, 0, 0, 0, 8]);
num1.large_add(num2);
var num_str = num1.format_string();
console.log(num_str);*/
// end

module.exports = large_number;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM