Lychrel Numbers Javascript?

Lychrel Numbers Javascript?

本文关键字:Javascript Numbers Lychrel      更新时间:2023-09-26

我被这个问题困住了:https://docs.google.com/document/d/1NNgUZtB5wy89DaROVNMy22Hfjt3gbwlq9qkMszU8Bu8/edit?usp=sharing^

的联系

如果你不相信这个链接,问题是:

循环:Lychrel数

大型程序实践

如果我们取47,把数字倒过来加起来,我们得到47+74 = 121,这是一个回文数。这意味着当数字倒过来时,数字保持不变。并不是所有的数字都能这么快地生成回文。例如:349+943 = 12921292+2921 = 42134213 + 3124 = 7337因此,对于数字349,需要三次迭代才能得到一个回文。

虽然还没有人证明它,但人们认为有些数字,如196,无论进行多少次迭代都不会产生回文。这样的数字被称为Lychrel数。令人惊讶的是,有些回文数本身就是Lychrel数;第一个例子是4994。

写一个程序,读取一个整数,如果输入是一个Lychrel数,输出YES,否则输出NO。此外,如果输入的数字不是Lychrel数,则程序必须输出到达回文数和最终回文数所需的迭代次数。通过强制用户输入低于10000,您可以假设该数字要么在50次迭代中变成回文,要么是一个Lychrel数。

示例程序执行:

输入:349

输出:NO 3 7337

输入:196

输出:是的

输入:89

输出:NO 24 8813200023188

输入:592

输出是的

这是我目前所知道的。我不知道我该怎么做才能成功。我是新的堆栈溢出,所以如果我做错了什么,请让我知道。谢谢!

    <!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>

也许有更好的方法,但这是可行的。

您遇到的主要问题是JavaScript根据变量的类型对+操作符做不同的事情。对于字符串,它将它们连接起来,但对于数字,它将它们相加。这尤其令人困惑,因为不同操作符的行为是不一致的。即,它将计算"5" == 5为真(即,它将==的字符串转换为数字,而不是+)

同样适用于split和join。当不带参数使用时,它们有不同的行为,尽管它们看起来是相反的。

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");
}
<body>
	Number: <input type='text' id='number' name='number' placeholder='1234'/>
	<button onclick='lychrelTest()'>Test</button></br>
	<div id='result'></div>
</body>