直接模拟,太菜了,简单模拟竟然错了两次才A。
还是要练练模拟。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <queue>
typedef long long LL;
const int maxn=1e6;
using namespace std;
char s[20];
int a[20],len,sum;
int ha[1111];
void get_n(int x){
sum=0;
int cnt=0,s=0;
while(x){
a[++cnt]=x%10;
x/=10;
sum+=a[cnt]*a[cnt];
}
len=cnt;
for(int i=1;i<=cnt/2;++i) swap(a[i],a[cnt-i+1]);
}
int main(){
LL n;
while(~scanf("%s",s)){
memset(ha,0,sizeof(ha));
int len = strlen(s);
int f=1;
for(int i=0;i<len;++i){
a[i+1]=s[i]-'0';sum+=a[i+1];
}
if(sum==1) {printf("YES\n");continue;}
sum=0;
for(int i=1;i<=len;++i) sum+=a[i]*a[i];
while(sum!=1){
if(ha[sum]) {f=0;break;}
ha[sum]=1;
get_n(sum);
}
if(f) printf("YES\n");
else printf("NO\n");
}
return 0;
}