如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。

如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。

请写出这个循环圈中最大的那个数字。

请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

答案:

 

代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
typedef long long ll;
ll n;
map<int,int> mp;
int d = 0;
int get(ll a) {
    int sum = 0;
    while(a) {
        sum += (a % 10) * (a % 10);
        a /= 10;
    }
    return sum;
}
int s[100000],c;
int main() {
    cin>>n;
    int t = get(n);
    while(!mp[t]) {
        mp[t] = ++ c;
        s[c] = t;
        t = get(t);
    }
    for(int i = mp[t];i <= c;i ++) {
        d = max(d,s[i]);
    }
    cout<<d<<endl;
}