数据结构实例<九>(IsHappy 快乐数)容易

题目:

写一个算法来判断一个数是不是"快乐数"。

一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为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

Code:

*首先是无限循环获取下一个要处理的数据,GetNextNum().直至跳出循环。
*判断是否是快乐树,等于一就是快乐数。非快乐数将会陷入一个死循环,我们利用数组存储,判定是否匹配即为非快乐数

 public class IsHappy
    {
      /**
      * @param n an integer
      * @return true if this is a happy number or false
      */
        //不是快乐数的数称为不快乐数(unhappy number),所有不快乐数的数位平方和计算,最後都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中。
        public Boolean isHappy(int n)
        {
            // Write your code here
            var temp = n;
            int[] unhappy = { 4, 16, 37, 58, 89, 145, 42, 20, 4 };
            while (true)
            {
                temp = GetNextNum(temp);
                if (temp == 1)
                {
                    Console.WriteLine("Happy Number:{0}", n);
                    return true;
                }

                else if (unhappy.Contains(temp))
                {
                    Console.WriteLine("UnHappy Number:{0}", n);
                    return false;

                }
            }
        }

        public int GetNextNum(int n)
        {
            double sum = 0;
            while (n > 0)
            {
                sum += Math.Pow(n % 10, 2);
                n = n / 10;
            }
            return (int)sum;
        }

    }




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值