编写一个算法来判断一个数是不是“Glodon number”。
一个“Glodon number”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,也可能是无限循环但始终变不到1,如果可以变成1,那么这个数就是Glodon Number。
示例:
输入:32
输出:true
解释:
3^2+2^2 = 13
1^2+3^2 = 10
1^2+0^2 = 1
#include <iostream>
#include <set>
using namespace std;
set<int> m; //定义全局关联容器set
size_t t = 0; //计算存入容器元素的次数
bool GlodonNum(int num)
{
int sum = 0;
bool b = 0;
while (num) //num不为0,计算出所以数字平方和
{
int a = num % 10;
sum += a*a;
num /= 10;
}
m.insert(sum); //若容器中不存在与sum相等的数,则将sum存入容器
++t; //计数器加一
if (sum == 1) //若sum为1,则返回ture
{
b = 1;
return b;
}
else if (t != m.size()) //若计算器与容器大小不等,说明sum已经出现过,陷入无限循环,返回false
return b;
else
{
b = GlodonNum(sum); //以上两种情况都不满足进行递归
return b;
}
}
int main()
{
int n;
cin >> n;
bool a = GlodonNum(n);
if (a)
cout << "true" << endl;
else
cout << "false" << endl;
system("pause");
return 0;
}