一、原题
2 ^15 = 32768,其位数之和为3 + 2 + 7 + 6 + 8 = 26。
数字2的位数总和是多少exponent
?
二、解题思路
1、第一眼就想到的方法
function powerDigitSum(exponent) {
var number = Math.pow(2, exponent);
var sum = 0;
console.log(number);
while(number!=0){
sum+=number%10;
number=(number - number%10)/10;
}
console.log(sum);
return sum;
}
powerDigitSum(15);
在指数很大时候会失败;
2、用数字保存2^1000次方时候会导致数字太大,位数不够,所以方法一不可行,下面这种方法用数组保存2^1000次方的每一位,然后做加法,完美运行
function powerDigitSum(exponent) {
var sum = 0;
var arr = [], arrAdd = [],k=1;
var tempMod = 0;
for(var i=0;i<1000;i++) {
arr[i]=0;
arrAdd[i]=0;
}
arr[0]=1;
for(var i=0;i<exponent;i++){
for(var j=0;j<k;j++){
arr[j]*=2;
if(arrAdd[j] != 0) {
arr[j] +=arrAdd[j];
arrAdd[j] = 0;
}
if(arr[j] >= 10){
tempMod = arr[j]%10;
arrAdd[j+1] = (arr[j]-tempMod)/10;
arr[j]=tempMod;
if(j+1==k){
k++;
}
}
}
}
for(var i=0;i<k;i++){
sum+=arr[i];
}
//if(arrAdd[k-1] != 0) arr[k-1]=arrAdd[k-1];
//console.log(k);
//console.log(arrAdd.toString());
//console.log(arr);
console.log(sum);
return sum;
}
powerDigitSum(1000);