快乐的号码错误

时间:2013-11-21 18:41:51

标签: math

因此。我写了一个片段来执行一个程序,以确认一个数字是否是一个快乐的数字。但除了10的权力之外,它不适用于任何数字。你能指出问题吗? 是的,它编译得很好。

    while(true)
    {
        while (num>0)
        {
            dig=num%10;
            sum=sum+(dig*dig);
            num=num/10;
        }
        num=sum;
        if(num==1)
        System.out.println("Happy");
        break;
    }

} }

3 个答案:

答案 0 :(得分:1)

您的算法似乎存在缺陷。首先,你没有发现不愉快的数字。

来自Wikipedia's page on happy numbers

  

一个快乐的数字由以下过程定义:从任何正整数开始,将数字替换为其数字的平方和,并重复该过程,直到数字等于1(它将保持不变),或者它在一个不包括1的循环中无休止地循环 1.这个过程以1结尾的那些数字是幸福的数字,而那些不以1结尾的数字是不愉快的数字(或悲伤的数字)。

(强调我的。)

翻译:你必须重复这个过程,直到你最终得到一个你认为是循环一部分的值。 Iff值为1,数字很高兴。如果不是,并且您没有检测到,那么您将永远循环。

答案 1 :(得分:1)

最重要的是,您没有将总和重置为零。

此外,任何不满意的号码都会无限循环。

答案 2 :(得分:0)

使用此功能会找到快乐,悲伤的数字

#include <cmath>
long fun(long);

long func(long x)
{
long sum=0,rem;
while(x>0)
{
    num=x%10;
    sum=sum+pow(rem,2);
    x=x/10;
}
if(sum>=10)
    func(sum);
else
return sum;
}