ConstStar
发布于 2022-09-04 / 211 阅读 / 0 评论 / 0 点赞

蓝桥杯2016年C组:平方怪圈

问题描述

如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入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


评论