3.3 数字相关(大数)

2018-07-17  本文已影响0人  Ching_Lee

面试题16.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
考点在于思考的全面性,分为三种情况:1)base为0;2)exponent为负数;3)正常情况

function Power(base, exponent)
{
    
    //1.如果base是0,就返回0
    if(base===0){
        return 0;
    }
    //2.如果exponent是负数
    else if(exponent<0){
      exponent=Math.abs(exponent);
      let result=PowerWithUnsign(base,exponent);
      return 1/result;
    }
    else{
        return PowerWithUnsign(base,exponent);
    }
}

function PowerWithUnsign(base,exponent){
    let result=1;
    for(let i=0;i<exponent;i++){
        result=result*base;
    }
    return result;
}

面试图17.打印从1到最大的n位数
主要是一个大数加法的问题。

<script>
    function printMaxNDigits(n) {
        if (n < 0)
            return;
        // 初始化一个长度为n的number数组,用number数组
        let number = Array.apply(null, Array(n)).map(() => 0);
        // 如果加1没有溢出,就打印
        while (!Increate(number)) {
            printNumber(number);
        }

    }


    /**
     * @return {boolean}
     * 执行的是一个+1的操作
     * @param number 数组
     *
     */
    function Increate(number) {
        //默认溢出参数为false
        let isOverflow = false;
        //默认进位值为0
        let nTakeOver = 0;
        let nLength = number.length;
        // 最后一位加1,如果没有进位,直接break。
        // 如果有进位,就要去算前一位加上进位
        for (let i = nLength - 1; i >= 0; i--) {
            //每一位的总值
            let nSum = number[i] + nTakeOver;
            // 是最后一位才加1
            if (i === nLength - 1) {
                nSum++;
            }
            //如果值大于等于10,说明进位了
            if (nSum >= 10) {
                // 如果i是0,说明是最高位,那么就溢出了
                if (i === 0) {
                    isOverflow=true;
                }
                else{
                    nSum=nSum-10;
                    nTakeOver=1;
                    number[i]=nSum;
                }
            }
            else{
                number[i]=nSum;
                break;
            }
        }
        return isOverflow;
    }

    // 打印的时候要注意,前面的0不打印
    function printNumber(number){
        let i=0;
        while(number[i]===0&&i<number.length){
            i++;
        }
        while(i<number.length){
            console.log(number[i]);
            i++;
        }
    }

</script>
上一篇 下一篇

猜你喜欢

热点阅读