//预处理ans=n,防止覆盖原数,无法输出
long long sum=0;//当前平方和
while(ans>0) { //尚有数位未计算
sum+=ans%10*ans%10;
//对10取模后得到最小一位的值,平方后加入到平方和中
ans/=10;//舍弃当前最小一位
}
if(sum==1) { //如果是happy number
cout<<"Case #"<<i<<": "<<n<<" is a Happy number."<<endl;
break;
//跳出循环
}
#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;
}