UVA10591 Happy Number题解

· · 题解

题意简述

解题思路

参考代码如下

#include <bits/stdc++.h>
using namespace std;
int main() {
    long long n;
    long long t;//询问次数
    int sum;
    int ans;
    cin >> t;
    bool vis[800];
    for (long long i = 1; i <= t; i++) {
        cin >> n;//待判定的数字
        memset(vis, 0, 800);//重置vis数组
        ans = n;//防止n的原值被覆盖
        while (1) {
            sum = 0;

            while (ans >= 1) {
                sum += (ans % 10) * (ans % 10);
                ans /= 10;
            }//求出平方和

            if (sum == 1) {
                cout << "Case #" << i << ": " << n << " is a Happy number." << endl;
                break;
            }//得到了1即为Happy number
            if (sum == n or vis[sum]) {
                cout << "Case #" << i << ": " << n << " is an Unhappy number." << endl;
                break;//出现了循环
            } else if (sum != 1) {//没有循环也没有结束,准备继续求平方和
                vis[sum] = 1;//标记为已到
                ans = sum;//将平方和作为要继续被操作的数。
            }
        }
    }

    return 0;
}