DESCRipTION
给一个数x,定义一个函数f(x)的结果是x的各位数字的平方和,若经过无数次递归操作之后若结果为1,也就是f(f(f(…f(x)…)))=1,那么这个数被认为是一个特别的数。给出一个数x请问这个数是否特别。
INPUT 包含多组测试数据(<=20),每组数据一行一个整数x(1<=x<=1000000000) OUTPUT 每组数据输出一行YES表示是一个特别的数,否则输出NO SAMPLE INPUT 19 2 14 SAMPLE OUTPUT YES NO NO 转态数其实很少。
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;int mark[1005], flag;void fun(int n){ if(flag == 0) return; int sum = 0 , x; while(n) { x = n%10; n /= 10; sum += x*x; } if(sum == 1) return; if(mark[sum] ==1) { flag = 0; return; } mark[sum] = 1; fun(sum);}int main(){ int n; while(scanf("%d",&n) != EOF) { memset(mark,0,sizeof(mark)); flag = 1; fun(n); if(flag) PRintf("YES/n"); else printf("NO/n"); } return 0;}新闻热点
疑难解答