头条面试题:判断一个数是否是happy number(每一位的平方和最终为1)
2021-04-06 10:37
281 查看
朋友面试头条二轮了,一轮的题目请看这一篇:头条面试题:求用户在线峰值和持续时间
这次的面试题目是:判断一个数是否是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
相关文章推荐
- 每天一道LeetCode-----判断一个数是否是happy number(每一位的平方和最终为1)
- 每日一道算法题:Google面试题:判断一个自然数是否是某个数的平方
- 谷歌面试题:判断一个自然数是否是某个数的平方
- java面试题之如何判断一个对象是否应该被回收
- 面试题——判断一个字符串是否是回文串
- Java面试题:判断一个数字是否为2的阶次方数
- C#面试题:输入一个长度100的数字字符串,判断是否能被7整除
- 链表面试题----判断一个单链表是否带环,若带环,求入口点和环的长度
- 判断一个自然数是否是某个数的平方(不能使用开方运算)
- 面试题精选(76):给定BST先序遍历序列,不构造BST的情况下判断BST是否每个node都只有一个child
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环) (转)
- 判断一个数是否为平方数
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环) (转)
- 判断一个整数是否满足完美平方?
- 判断一个数是否为平方数
- [面试题] 判断一个单链表是否有环
- 剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)
- 【面试题】剑指offer03--判断一个数是否在一个二维数组中
- 平方怪圈 如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。 对新产生的正整数再做同样的处理。 如此一来,你会发现,不管开始取的是什么数字, 最终如果不是落入1,就是落入同一个循环圈。