头条面试题:判断一个数是不是happy number(每一位的平方和最终为1)

朋友面试头条二轮了,一轮的题目请看这一篇:头条面试题:求用户在线峰值和持续时间html

此次的面试题目是:判断一个数是不是happy number(每一位的平方和最终为1)git

知道题目首先要理解题目。所谓happy number就是一个整数每一个位数上的数字的平方相加,一直循环,若是最终能等于1,则就是happy number。面试

举例:19app

第一次:1²=9²=82测试

第二次:8²+2²=68spa

第三次:6²+8²=100code

第四次:1htm

这样的数就是happy number。blog

怎么解决呢?这样的问题能够一直循环运算,发现等于1就是happy number,不等于就不是。我朋友就采起的是这种方法。但这种方法有个问题,若是不是happy number要何时中止循环进行判断呢?由于不知道循环是不是重复的,或仍是无限不重复的循环。还有就是这种循环极容易溢出,因此最好的方法仍是要找出规律。get

如下就是个人线下手动运算,目的是找出规律:

 

 

 

从0~19的运算结果来看能够得出如下结论:

1.0不是happy number;

2.全部happy number最终都能等于1;

3.全部不是happy number的数都是无限重复循环,且都从4开始循环。

 

得出了以上规律就能够开始写程序代码了。

 计算平方和的方法:

public static int SumSquares(int number)
{
    var dic = new ArrayList();
    while (true)
    {
        dic.Add(number % 10);
        if (number / 10 == 0)
        {
            break;
        }

        number = number / 10;
    }
    var num = 0;
    foreach (var item in dic)
    {
        num += (int)item * (int)item;
    }
    return num;
}

 

判断是不是Happy Number:

public static bool IsHappyNumber(int number)
{
    while (true)
    {
        if (number == 4)
            break;
        if (number == 1)
            return true;
        number = GetNumber(number);
    }
    return false;
}

 

最后在main方法中调用:

static void Main(string[] args)
{
    while (true)
    {
        Console.WriteLine("请输入一个整数(输入exit退出):");
        var writeText = Console.ReadLine();
        if (writeText == "exit")
            break;
        var number = Convert.ToInt32(writeText);
        bool isHappyNumber = IsHappyNumber(number);
        if (isHappyNumber)
            Console.WriteLine("输入的是一个Happy Number!");
        else
            Console.WriteLine("输入的不是一个Happy Number!");
        Console.WriteLine();
    }
    Console.ReadKey();
}

 测试:

 

 成功!!!

 项目下载地址:https://gitee.com/jingboweilanGO/happy-number.git

相关文章
相关标签/搜索