【发布时间】:2017-03-02 11:02:08
【问题描述】:
我一直在努力应对这一挑战,但似乎找不到失败的地方:
有些数字具有有趣的特性。例如:
89 --> 8¹ + 9² = 89 * 1
695 --> 6² + 9³ + 5⁴= 1390 = 695 * 2
46288 --> 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51
给定一个正整数 n,写成 abcd...(a, b, c, d... 是数字)和一个正整数 p,我们想找到一个正整数 k,如果它存在的话,比如总和n 的位数取 p 的连续幂等于 k n。换句话说:
是否存在整数 k 如:(a ^ p + b ^ (p+1) + c ^(p+2) + d ^ (p+3) + ...) = n * k 如果是这种情况,我们将返回 k,如果不是,则返回 -1。
注意:n、p 将始终作为严格的正整数给出。
digPow(89, 1) should return 1 since 8¹ + 9² = 89 = 89 * 1
digPow(92, 1) should return -1 since there is no k such as 9¹ + 2² equals 92 * k
digPow(695, 2) should return 2 since 6² + 9³ + 5⁴= 1390 = 695 * 2
digPow(46288, 3) should return 51 since 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51
我是 javascript 新手,所以我的代码可能有问题,但我找不到。我这样做的全部目的是正确学习javascript,但现在我想找出我做错了什么。我尝试通过将给定的整数与10取模,并使用trunc将其除以10来将给定的整数转换为数字以摆脱小数部分。我试图用这些数字用它们各自的能力来填充数组。但是测试结果只是说我只返回 0。在我的代码中唯一返回 0 的是第一部分,但是当我尝试将其注释掉时,我仍然返回 0。
function digPow(n, p){
// ...
var i;
var sum;
var myArray= new Array();
if(n<0)
{
return 0;
}
var holder;
holder=n;
for(i=n.length-1;i>=0;i--)
{
if(holder<10)
{
myArray[i]=holder;
break;
}
myArray[i]=holder%10;
holder=math.trunc(holder/10);
myArray[i]=math.pow(myArray[i],p+i);
sum=myArray[i]+sum;
}
if(sum%n==0)
{
return sum/n;
}
else
{
return -1;
}}
【问题讨论】:
-
如果
n是一个数字,它不会有length属性。所以i将是undefined并且你的循环永远不会运行,因为undefined不大于或等于零 -
我明白了,这是你能看到的唯一问题吗?我想我需要阅读更多关于属性的信息
标签: javascript algorithm math numbers