我在千千蓝鲸上遇见个题(不要去找 团队内题目) 题干我复制过来了 样例我能过但是提交就超时,超了大概两百到三百毫秒
对于一个正整数,每一次都将该数替换为它各个数位上的数字之和。然后重复这个过程直到这个数变成 1,当然也可能是无限循环而始终变不到 1,我们把通过这个过程永远变不成 1 的数称之为 无穷数。 请编写程序,判断给定的 n 个正整数中,哪些数是无穷数,哪些数不是, 是输出 YES,不是输出 NO。
两行,第一行一个正整数 n,第二行 n 个 正整数 ai。
n 行,对应输入的 n 个正整数是否是无穷数, 是输出 YES,不是输出 NO。
2 2 19
YES NO
1 <= n <= 10000, 2 <= ai <= 231- 1
#include<bits/stdc++.h>
using namespace std;
int n;
int GetSum(int x){
int sum;
while(x){
sum+=x%10;
x/=10;
}
if(sum==10){
return 1;
}
return sum;
}
bool EndlessNum(int x){
while(x/10){
x=GetSum(x);
}
if(x==1){
return false;
}
return true;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(EndlessNum(x)){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
return 0;
}
蒟蒻再次求助各位大佬·-·