http://poj.grids.cn/problem/2952/ 题目较为简单 我就不解释了 #include<iostream> using namespace std; int len=0; bool add(int a[],char b[],int v2[],int v1[]) { for(int i=len-1;i>=0;i--) { a[i]+=b[i]-'0'; if(a[i]>=10) { if(i==0) return 0; else { a[i-1]+=a[i]/10; a[i]%=10; } } v2[a[i]]++; v1[b[i]-'0']++; } return 1; } int main() { char n[65]={0}; while(cin>>n&&strcmp(n,"0")!=0) { int flag=1; int a[65]={0}; len=strlen(n); for(int i=0;i<len;i++) { int v1[10]={0}; int v2[10]={0}; if(add(a,n,v2,v1)) { int j=0; for(;j<10&&v1[j]==v2[j];j++); if(j!=10) flag=0; } else flag=0; } cout<<n<<" "<<"is "; if(flag) cout<<"cyclic"<<endl; else cout<<"not cyclic"<<endl; } return 0; }