快乐数
内存限制: 256 MiB 时间限制: 1000 ms 标准输入输出 题目类型: 传统 评测方式: 文本比较
题目描述
题目描述
「快乐数」 定义为:
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n
是 快乐数 就输出yes
;不是,则返回 no
。
输入格式
第一行输入一个整数 n,表示要判断的数字。
输出格式
如果 n
是 快乐数 就输出yes
;不是,则返回 no
样例
样例输入1
复制19
样例输出1
复制yes
样例输入2
复制2
样例输出2
复制no
数据范围
1 <= n <= 2 ^ 31 - 1
#include <bits/stdc++.h>
using namespace std;
int n, slow, fast;
int next(int txt) {
int sum = 0;
while(txt != 0) {
int t = txt % 10;
sum += t * t;
txt /= 10;
}
return sum;
}
int main() {
scanf("%d", &n);
slow = n, fast = next(n);
while(slow != 1 && slow != fast) {
slow = next(slow);
fast = next(next(fast));
}
if(slow == 1) {
printf("yes");
} else {
printf("no");
}
return 0;
}