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,就不用再继续验证了。