当前位置: 代码迷 >> 综合 >> 算法 二 Power digit sum 幂数字总和
  详细解决方案

算法 二 Power digit sum 幂数字总和

热度:30   发布时间:2023-10-31 13:50:31.0

一、原题

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);

 

  相关解决方案