zoukankan      html  css  js  c++  java
  • 头条面试题:判断一个数是否是happy number(每一位的平方和最终为1)

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

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

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

    举例:19

    第一次:1²=9²=82

    第二次:8²+2²=68

    第三次:6²+8²=100

    第四次:1

    这样的数就是happy number。

    怎么解决呢?这样的问题可以一直循环运算,发现等于1就是happy number,不等于就不是。我朋友就采取的是这种方法。但这种方法有个问题,如果不是happy number要什么时候停止循环进行判断呢?因为不知道循环是否是重复的,或还是无限不重复的循环。还有就是这种循环极容易溢出,所以最好的方法还是要找出规律。

    以下就是我的线下手动运算,目的是找出规律:

     

     

    从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

    如果觉得不错,可以推荐收藏一下,让我也更有动力。
  • 相关阅读:
    CRM PrincipalObjectAccess(POA)
    crmForm.SubmitCRMForm
    transactionCurrencyId needs to be supplied to format a transaction money field.
    GitLab 之 Linux十分钟快装
    GitLab 之 Linux十分钟快装
    秒杀系统架构分析与实战
    秒杀系统架构分析与实战
    秒杀系统架构分析与实战
    创建微服务?请先回答这10个问题
    创建微服务?请先回答这10个问题
  • 原文地址:https://www.cnblogs.com/jingboweilan/p/14591545.html
Copyright © 2011-2022 走看看