Lychrel Numbers Javascript?

时间:2016-10-11 00:22:43

标签: javascript

我坚持这个问题: 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>

1 个答案:

答案 0 :(得分:0)

也许还有更好的方法,但这很有效。

您遇到的主要问题是JavaScript根据变量的类型对+运算符执行不同的操作。对于字符串,它会连接它们,但对于数字,它会添加它们。这可能特别令人困惑,因为不同运营商的行为不一致。即它会将"5" == 5评估为真(即它将字符串转换为==的数字,但不会转换为+的数字

同样适用于拆分和加入。它们在没有参数的情况下使用时会有不同的行为,尽管看起来它们可能是相反的。

&#13;
&#13;
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;
&#13;
&#13;