【Everyday】(4)快乐数 - Everyday - SegmentFault
写一个算法来判断一个数是不是"快乐数"。
一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。
19 就是一个快乐数。
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
解题思路
每一位的数字的平方,相加之后,得到一个数之后,再将其进行拆分,然后再相加,直到其最后结果为1,及证明这个数为快乐数,所以首先我们要得到这个数字的每一位上的数字,那么做法就是将其通过除以10来得到这个数字的每一位,然后再计算,在重复,开始编码,但是一个问题是如何判断需要在什么时候停止呢?如果这个数不能够到达1的话,一定会在到达某个数之后,又回到原来的数,因此是个循环的过程,所以要找大这个循环点,然后来判断,这个循环点如何找呢?也就是记录其之前出现过的数字,因为int最大表示的数字为10位数,因此其最大可以表示的范围是810,因此通过一个数组,将实际的数据大小作为下标索引,如果出现过这个数字,则将其标记为1,如果再次出现这个数字,则认为该数字不是快乐数。
实现代码
Read full article from 【Everyday】(4)快乐数 - Everyday - SegmentFault
No comments:
Post a Comment