这道题就是用循环遍历来找,首先需要将数字转换成字符型数组,将用到sprintf函数,然后先进行循环判断该数字是否是没有数字重复,以及没有0。然后再用一个while循环找到第一个符合条件的循环数。代码如下。
#include<bits/stdc++.h>
using namespace std;
int main (){
freopen ("runround.in","r",stdin);
freopen ("runround.out","w",stdout);
unsigned long long M=0,ans=0;
char c[35];
int jud[15],i=0,k=0,cnt=0;
bool judge=true,flag=false;
cin>>M;
ans=M;
for (ans=M+1;;ans++){
memset(c,'0',sizeof(c));
memset(jud,0,sizeof(jud));
sprintf(c,"%d",ans);
int len =strlen(c);
judge=true;
for (i=0;i<len;i++){
if (c[i]=='0'){
judge=false;
break;
}
k=c[i]-'0';
if (jud[k]!=0){
judge=false;
break;
}
jud[k]++;
}
if (judge){
cnt=0;
i=0;
flag=false;
while (true){
k=c[i]-'0';
if (i==0&&cnt==len){
flag=true;
break;
}
if (jud[k]==0){
flag=false;
break;
}
else if (jud[k]){
jud[k]=0;
cnt++;
}
i=(i+k)%len;
}
if (flag){
cout<<ans<<endl;
break;
}
}
}
return 0;
}