zoj1078 Palindrom Numbers

来源:互联网 发布:js map 遍历对象数组 编辑:程序博客网 时间:2024/05/17 04:05
  1. //zoj1078 Palindrom Numbers
  2. //Accepted 1078 C++ 00:00.00 392K
  3. #include <stdio.h>
  4. #include <string.h>
  5. int n;
  6. //把十进制的num转换成k进制,返回s的长度
  7. int converse(int s[],int num,int k)
  8. {
  9.        int len = 0;
  10.        while (num){
  11.               s[len++] = num%k;
  12.               num /= k;
  13.        }
  14.        return len;
  15. }
  16. bool palindrom(int s[],int len)
  17. {
  18.        for (int i=0; i<len/2; ++i)
  19.               if (s[i] != s[len-1-i]) return false;
  20.        return true;
  21. }
  22. void solve()
  23. {
  24.        int k,s[20],a[17]={0};
  25.        bool flag = false;
  26.        for (k=2; k<=16; ++k){
  27.               int len = converse(s,n,k);
  28.               if (palindrom(s,len)) {
  29.                      a[k] = 1;
  30.                      flag = true;
  31.               }
  32.        }
  33.        if (flag) {
  34.               printf ("Number %d is palindrom in basis",n);
  35.               for (k=2; k<=16; ++k)
  36.                      if (a[k]) printf (" %d",k);
  37.        }
  38.        else printf ("Number %d is not a palindrom",n);
  39.        printf ("/n");
  40. }
  41. int main()
  42. {
  43. #ifdef ONLINE_JUDGE
  44. #else
  45.        freopen("1078.txt","r",stdin);
  46. #endif
  47.        while (scanf("%d",&n)!=EOF && n)
  48.               solve();
  49. #ifdef ONLINE_JUDGE
  50. #else
  51.        fclose(stdin);
  52. #endif
  53.        return 0;
  54. }
原创粉丝点击