javascript armstrong数字测试用例错误
我要解决的问题是: 编写一个javascript程序,当给定的数字是Armstrong数字时返回true,否则返回false。如果每个数字的n次幂之和等于数字本身,则任何n位数字都是阿姆斯特朗数。示例:javascript armstrong数字测试用例错误,javascript,while-loop,Javascript,While Loop,我要解决的问题是: 编写一个javascript程序,当给定的数字是Armstrong数字时返回true,否则返回false。如果每个数字的n次幂之和等于数字本身,则任何n位数字都是阿姆斯特朗数。示例:153是一个3位的阿姆斯特朗数,因为每个数字的三次方之和等于153(153=1*1*1+5*5+3*3) 提示:使用Math.pow(i,n)计算i的n次方。使用parseInt(i)获取i的整数值。输出代码的格式应为console.log(“结果是”,variableName) 我的代码是: v
153
是一个3
位的阿姆斯特朗数,因为每个数字的三次方之和等于153
(153=1*1*1+5*5+3*3
)
提示:使用Math.pow(i,n)
计算i
的n次方。使用parseInt(i)
获取i
的整数值。输出代码的格式应为console.log(“结果是”,variableName)
我的代码是:
var num = prompt("Enter a number to check Armstrong");
var t = "Armstrong";
var f = "Not Armstrong";
function armst(x) {
var a = x, b, sum = 0;
while (a > 0) {
b = a % 10;
sum += (b * b * b);
a = parseInt(a / 10);
}
if (sum === x) {
return t;
} else {
return f;
}
}
var output = armst(num);
console.log("Result is : ", output);
当我在课程网站上运行这段代码时,它给出了正确的输出,但根据编译器,它并没有通过所有的测试用例
我错过什么了吗?有什么可以改进的?我认为在一些测试中
b=a%10代码>和a=parseInt(a/10)代码>可能会给出一些舍入错误。我建议使用一种不同的方法。大概是这样的:
function isArmstrong(number){
const digits = number.toString().split(''); // get all the digits
const numberLength = digits.length; // get the length of the number
const sum = digits.reduce((accumulator, digit)=> parseInt(accumulator)+Math.pow(parseInt(digit), numberLength))
// use reduce to iterate and add every number to the numberLength power
return sum === number
}
要获取/Armstrong数字,需要将数字的长度作为字符串,如n
获取求和值的幂
只是一个个人的话,因为规格,我会接受,因为你已经有了一个数字,而不是
功能armst(x){
var值=parseInt(x,10),
剩余=价值,
数字
总和=0,
n=x.toString().length;//如果输入了数字,则添加toString
当(休息){
数字=剩余的%10;
休息=数学楼层(休息/10);
sum+=Math.pow(数字,n);//在这里使用
}
返回和===值
“阿姆斯特朗”
:“不是阿姆斯特朗”;
}
var num=prompt(“输入一个数字以检查Armstrong”),//尝试使用54748
输出=armst(num);
log(“结果为:”,输出)代码>当我输入num=153时,您的第一次和第二次编辑提供了正确的输出,但是编译器似乎进入了无限循环,因为网站没有显示程序正确(通常是正确的)的消息,并且我的cpu以100%的速度运行。第三次编辑根本不起作用。可能您输入了一个数字,然后需要toString
来获得数字的长度。5474 547 54 5结果是:不是阿姆斯特朗| |这发生在将console.log(rest)放入while循环后的第5次编辑中的54748中。在最新的编辑中,我得到了正确的输出。网站仍然说代码不正确,但我认为这是另一个问题。谢谢。