我坚持这个问题: https://docs.google.com/document/d/1NNgUZtB5wy89DaROVNMy22Hfjt3gbwlq9qkMszU8Bu8/edit?usp=sharing ^链接
如果您不信任该链接,请回答以下问题:
循环:Lychrel数字
大型计划实践
如果我们取47,反转数字并加上,我们得到47 + 74 = 121,这是一个回文数。这意味着当数字反转时,数字保持不变。并非所有数字都如此迅速地产生回文。例如: 349 + 943 = 1292 1292 + 2921 = 4213 4213 + 3124 = 7337 因此,对于数字349,它需要三次迭代才能到达回文。
虽然还没有人证明这一点,但有人认为,无论进行多少次迭代,一些数字,如196都不会产生回文。这样的数字称为Lychrel数。令人惊讶的是,有一些回文数字本身就是Lychrel数字;第一个例子是4994。
写一个读取一个整数的程序,如果输入是Lychrel数则输出YES,否则输出NO。此外,如果输入数字不是Lychrel数,则程序必须输出到达回文所需的迭代次数和最终的回文数。通过强制用户输入低于10000,您可以假设该数字在50次迭代中变为回文或者是Lychrel数。
示例程序执行:
输入:349
产出:NO 3 7337
输入:196
输出:是
输入:89
产出:NO 24 8813200023188
输入:592
输出是
这是我到目前为止所拥有的。我不明白我需要做些什么才能让它发挥作用。我是Stack Overflow的新手,所以如果我做错了,请告诉我。谢谢!
<!doctype html>
<html>
<head></head>
<body>
Number: <input type='text' id='number' name='number' placeholder='1234'/> </br>
Re-enter the same number: <input type='text' id='number2' name='number2' placeholder='1234'/>
<button onclick='convert()'>Convert</button></br>
<div id='result'></div>
<script>
function convert(){
var originalNum=parseInt(document.getElementById('number').value);
var newNum=parseInt(document.getElementById('number2').value);
var x;
var total=originalNum;
var palindrome=false;
for (x=0; x<50; x++) {
newNum==newNum.split("").reverse().join();
total+=newNum;
if (total==total.split().reverse().join()){
palindrome=true;
break;
}
}
if (palindrome)
document.getElementById('result').innerHTML=("NO");
else
document.getElementById('result').innerHTML=("YES");
}
</script>
</body>
</html>
答案 0 :(得分:0)
也许还有更好的方法,但这很有效。
您遇到的主要问题是JavaScript根据变量的类型对+
运算符执行不同的操作。对于字符串,它会连接它们,但对于数字,它会添加它们。这可能特别令人困惑,因为不同运营商的行为不一致。即它会将"5" == 5
评估为真(即它将字符串转换为==
的数字,但不会转换为+
的数字
同样适用于拆分和加入。它们在没有参数的情况下使用时会有不同的行为,尽管看起来它们可能是相反的。
function lychrelTest() {
var originalNum=document.getElementById('number').value;
if (isNaN(parseInt(originalNum))) {
alert('"'+originalNum+'" is not a number');
return;
}
var result = document.getElementById('result');
result.innerHTML = "";
var current=originalNum;
var palindrome=false;
var x;
for (x=0; x<50; x++) {
var rev = current.split("").reverse().join("");
var attempt = current + "+" + rev;
current = (parseInt(current) + parseInt(rev)).toString();
result.innerHTML += attempt + "="+ current + "<br />";
if (current == current.split("").reverse().join("")) {
palindrome=true;
break;
}
}
result.innerHTML+=(palindrome?("NO: "+current+" after "+(x+1)+" iterations"):"YES");
}
&#13;
<body>
Number: <input type='text' id='number' name='number' placeholder='1234'/>
<button onclick='lychrelTest()'>Test</button></br>
<div id='result'></div>
</body>
&#13;