HappyNumber leetcode算法题

HappyNumber leetcode算法题

HappyNumber一个快乐的数字是由以下过程定义的数字:从任何正整数开始,将数字替换为数字的平方和,并重复该过程,直到数字等于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

如果一个数小于十,那么先直接平方后,再利用上面的方法去验证该数是否为HappyNumber。

因为题目所给的数是int类型的(小于65536),所以如果不知道给你的数的位数是多少就有点麻烦。所以我选择的方法是直接把数字转换成字符串,然后再将字符转换成数字,进行计算判断。

#include "stdafx.h"
#include<iostream>
#include <sstream> 
#include<string>
#include<math.h>
using namespace std;
bool isHappy(int n)
{
    stringstream stream;//声明一个中间变量先存放数字n
    double sum=0;
    int number;
    stream<<n;
    string str;
    stream>>str;//将数字转换成字符串
    cout<<str<<endl;
    stream.clear();//将中间变量清空
    for(string::size_type ix=0;ix!=str.size();ix++)
    {
        stream<<str[ix];//将字符串的每个字符存入变量
        stream>>number;//将字符串的字符转换成数字
        sum+=number*number;
        stream.clear();//每次存放完,转换后都清空变量
    }
    if(sum==1)
        return true;
    else if(sum==4||sum==20)
        return false;
    else
    {
        return isHappy(sum);
    }

}

在1~10中只有1和7是happynumber,2,3,4,5,6,8,9都不是,在计算的过程中算到最后如果不是HappyNumber的话,sum要么等于4要么等于20,就不用再继续验证了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值