题目描述
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
示例:
输入:19
输出:true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/happy-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
白话题目:
每个数都能拆分成一位一位的数字,拆完后就平方再求和,得出来的数的平方只要大于10,就继续算,看能不能等于1,
这里面有一个事它说得含糊不清的,就是什么时候算完,
关键在这里。
我欲成仙、快乐齐天
算法:
思路就是每个数字在经过若干运算之后总能变成一位数,而在所有一位数中只有1和7能在若干运算之后结果为1,
发现这一点以后我们将n经过若干次迭代成一位数后,判断其是否为1或7即可。
可是你会写吗?
C语言完全代码
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
int squaresum(int n)
{
int res=0;
while(n/10!=0)
{
int temp;
temp=n%10; //最后一位
res+=temp*temp;
n=n/10;
}
res=res+n*n;
return res;
}
bool isHappy(int n)
{
while(n>9)
n=squaresum(n);
if(n==1||n==7)
return 1;
return 0;
}
int main()
{
int n=0;
scanf("%d",&n);
int result=isHappy(n);
printf("%d",result);
return 0;
}