前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >488. 快乐数

488. 快乐数

作者头像
和蔼的zhxing
发布2018-09-04 13:17:17
4230
发布2018-09-04 13:17:17
举报

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

一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。 样例 19 就是一个快乐数。

代码语言:javascript
复制
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

按照题目中说的一共有两种情况,一种情况是一直进行上述操作,然后得到1,要么是无限循环得不到1,那么就按照这个思路,首先while循环判断是否能得到1,然后每一步再判断是否有循环(若有循环,则即是有重复的数,用vector<int>结合find来判断),这样就是可以的: 顺便复习一下std::find函数,在头文件algorithm里。 std::find

代码语言:javascript
复制
template <class InputIterator, class T>
   InputIterator find (InputIterator first, InputIterator last, const T& val);
//接受一对迭代器和一个查找目标,返回一个迭代器,如果没找到返回尾后。
代码语言:javascript
复制
   bool isHappy(int n)
    {
        if(n<=0)   //小于零的话直接返回错误
        return false;
        vector<int> res;
        
        while(n!=1)      //得不到1 的话就一直循环
        {
            int num=0;    //存算出来的数
            while(n>0)
            {
            num+=(n%10)*(n%10);
            n/=10;
            }     //逐位求平方和,从低位往高位求
            
            if(find(res.begin(),res.end(),num)==res.end())   
            //这是std::find接受一堆迭代器和一个目标,是一个模板函数
            {
                res.push_back(num);  //如果没找到,就把这个数放进去
            }
            else
            return false;   //如果能找到的话说明产生循环了,则肯定更不是快乐数
            n=num;
        }
        //n==1了才可能跳出循环,返回true
        return true;
    }

思路二,我一开始也想着算几个数试一下,身边没有笔,就没算,后来一查果然无论是快乐或者不快乐,最后都会归结到1或者4,也就是说,只要是一个整数,一直循环进行这个操作,不是最后得到的不是1就是4,那么这样就简单多了,直接循环,得到1或者4跳出,然后根据是1或者4判断是否是快乐数: code:

代码语言:javascript
复制
  bool isHappy(int n) {
        if(n<=0)
        return false;
        while(n!=1&&n!=4)
        {
            int num=0;
            while(n>0)
            {
            num+=(n%10)*(n%10);
            n/=10;
            }
            n=num;
        }
        return n==1;
        // write your code here
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.11.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档