题目描述:
编写一个算法来确定一个数字是否是“理想数”。 快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛等于1且一直等于1,要么将无休止地循环下去且最终不会收敛等于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
要求:
当输入理想的数字时,输出True,否则输出False。
思路:
方法一(c语言实现):
1. 不理想的数字最终会在 [4,16,37,58,89,145,42,20] 这些数字中无限循环,因此可以加入判断,当数字变为这些数字里的任意一个(比如4)时就结束循环,输出False,从而避免无限循环的产生。
2. 理想数都会收敛于1。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int car = 1;
int num = 0;
int tmp = 0;
while (car == 1)
{
printf("请输入一个数字:\n"