头条面试题:判断一个数是否是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
头条面试题:判断一个数是否是happy number(每一位的平方和最终为1)的更多相关文章
- 腾讯面试题 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中? 这个题目已经有一段时间了,但是腾讯现在还在用来面试.腾讯第一次面 ...
- 2018春招-今日头条笔试题-第一题(python)
题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) 解题思路: 要想得到输入的数字列中存在相隔为k的数,可以将输入的数字加上k,然后判断其在不在输入的数字列中即可. #-*- cod ...
- #6 判断一个数是否为2的n次方
「ALBB面试题」 [题目] 如何判断一个数是否为2的n次方 [题目分析] 看到这种题,相信大家第一反应就是循环除2,这样做肯定是可以得出结果的:但是这种做法无疑大大增加了计算机的运行时间,一个非常大 ...
- 2018春招-今日头条笔试题-第四题(python)
题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) #-*- coding:utf-8 -*- class Magic: ''' a:用于存储数组a b:用于存储数组b num:用于 ...
- [算法]判断一个数是不是2的N次方
如果一个数是2^n,说明这个二进制里面只有一个1.除了1. a = (10000)b a-1 = (01111)b a&(a-1) = 0. 如果一个数不是2^n, 说明它的二进制里含有多一 ...
- 如何判断一个数是否为素数(zt)
怎么判断一个数是否为素数? 笨蛋的作法: bool IsPrime(unsigned n){ if (n<2) { //小于2的数即不是合数也不是素数 throw 0; ...
- pyhton 查找一个数的所有因子 以及 判断一个数是否是质数 两个小脚本
最近看到一个网站, 欧拉计划.挺好玩,都是一些算法题.这是本站:http://projecteuler.net/problems 这个是中文站:http://pe.spiritzhang.com/ 下 ...
- 剑指Offer——完美+今日头条笔试题+知识点总结
剑指Offer--完美+今日头条笔试题+知识点总结 情景回顾 时间:2016.9.28 16:00-18:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:完美世界笔试 ...
- 使用二分查找判断某个数在某个区间中--如何判断某个IP地址所属的地区
一,问题描述 给定100万个区间对,假设这些区间对是互不重叠的,如何判断某个数属于哪个区间? 首先需要对区间的特性进行分析:区间是不是有序的?有序是指:后一个区间的起始位置要大于前一个区间的终点位置. ...
随机推荐
- Uva 642 - Word Amalgamation sort qsort
Word Amalgamation In millions of newspapers across the United States there is a word game called J ...
- sed常用
行首添加字符串 # cat a [root@localhost b]# vim a 文件a将每行的第1列添加HEAD [root@localhost b]# sed 's/^/HEAD &/g ...
- 进入除错模式!进入此模式后,将会出现更多的选项,分别是: · 以基本图形介面安装 CentOS 7 (使用标准显卡来设定安装流程图示); · 救援Centos系统; · 执行内存测试(Run a memory test);
Centos 7.3 安装 0.0392017.07.14 20:12:09字数 1550阅读 985 Centos 7.3 基于 Red Hat 企业版的源代码的最新版本的 CentOS 7 在今年 ...
- iPhone手机怎么和电脑互传文件,一条数据线搞定
官方的方法是,通过iTunes进行文件的传输.传个文件还要特意安装个iTunes,实在是麻烦. 其实我们只需要在苹果应用商店app store下载Documents这个文件就可以. 另外,Docume ...
- 用PHP爬取知乎的100万用户
http://blog.jobbole.com/88788/ 突然发现 大数据 Python的爬虫能力很强 爬取到的数据 直接可以用于维修QQ营销 精准营销
- linux命令--使用fsck修复文件系统
使用fsck修复文件系统错误 1.问题描述 服务器maint_samba 由于服务器maint_samba (debian操作系统)没有正常关机,在重新启动过程中/dev/sdb1出现文件系统错误,需 ...
- PHP常用函数记录
1.mixed print_r(mixed $expression [,bool $return=false ]) 打印变量信息. 相关的函数还有var_dump().var_export() $re ...
- svg 飞线,源码
<html> <head> <meta charset="utf-8" /> <meta name="viewport" ...
- 备份分区,备份文件切割保存 dd
cd /tmp wget dl.fedoraproject.org/pub/epel/6/x86_64/dcfldd-1.3.4.1-4.el6.x86_64.rpm sudo yum install ...
- 一:windows10开启虚拟化服务(也可用于部署docker提前准备)
查看虚拟化已开启: 如果未启用,则需要添加虚拟化功能:控制面板 -> 启用或关闭Windows功能 选择Hyper-V的所有功能,确定: 系统会自动搜索并安装功能.安装完毕即可. 完结,撒花~~