面试题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>
网友评论