美文网首页
3.3 数字相关(大数)

3.3 数字相关(大数)

作者: Ching_Lee | 来源:发表于2018-07-17 22:52 被阅读0次

    面试题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>
    

    相关文章

      网友评论

          本文标题:3.3 数字相关(大数)

          本文链接:https://www.haomeiwen.com/subject/fhjbpftx.html