问题描述
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
解决方案
代码
#include <iostream>
#include <sstream>
#include <algorithm>
using namespace std;
int powsums(int n) {
// stringstream ss;
// ss << n;
// string buf = ss.str();
//
// for (int i = 0; i < buf.size(); ++i) {
// int temp = buf[i] - '0';
//
// sum += temp * temp;
// }
int sum = 0;
while (n) {
int temp = n % 10;
sum += temp * temp;
n /= 10;
}
return sum;
}
int main() {
int n;
cin >> n;
int num_max = 0;
while (true) {
n = powsums(n);
if (n > num_max) {
num_max = n;
} else if (n == num_max) {
break;
}
}
cout << num_max;
return 0;
}
输入
2
输出
145