问题:
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
我的解答及代码:
/* 想法:(循环)将每一位的平方求和,循环的判断条件是“它们的和是否为一”,注意:要考虑不是快乐数的情况(加一个限制条件,
也就是循环次数的限制)*/
/* 存在的疑问:1. times的选取如果不够大,那么会出错,这个怎么解决?(薛的解法:设置不满足条件的退出语句,即出现重复数
字的时候跳出循环。)
2. 我好像没用到hashmap(笑cry)*/
bool isHappy(int n)
{
int sum=0;
int num=n;
int times=1000;
while(num!=1 && times) //times的设置,是为了防止遇到的数字不是快乐数,那么就进入了死循环!
//while(num!=1) //这种写法提交结果是“超出时间限制”
{
while(num>0)
{
sum=sum+(num%10)*(num%10);
num=num/10;
}
num=sum;
sum=0;
times--;
}
if(num==1)
return true;
else
return false;
}
薛的两种解法:
哈希表就是字典,通过key索引value。这里感觉可以将每个输入数字(每次计算出来的值是一个新的输入)设置为key,然后输出的平方和为value,如果某个输入的输出在字典的key中存在,则退出。
查找比较多的适合用字典(哈希树),插入取出比较多适合list。
字典查找还是要快一点。