首页 > 代码库 > POJ 1047 Round and Round We Go

POJ 1047 Round and Round We Go

https://vjudge.net/problem/POJ-1047

题意:

给一个整数,它的长度为n,从1开始一直到n和该整数相乘,判断每次结果是否和原来的整数是循环的。

 

思路:

大整数的乘法。

 1 #include <iostream>   2 #include <cstdio>   3 #include <cstring>   4 #include <algorithm>   5 #include <cmath>   6 #include<vector> 7 using namespace std; 8  9 char s[65];10 int num[65];11 int temp[65];12 int n;13 14 bool cacl(int m)15 {16     int t = 0;17     for (int i = 0; i < n; i++)18     {19         temp[i] = (num[i] * m + t) % 10;20         t = (num[i] * m + t) / 10;21     }22     if (t>0)  return false;23     return true;24 }25 26 bool judge()27 {28     for (int i = 0; i<n; ++i)29     {30         int k = 0;31         if (temp[i] == num[0])32         {33              while (k<n &&num[++k] == temp[(i+k) % n]);34              if (k == n)   return 1;   35         }36     }37     return 0;38 }39 40 int main()41 {42     //freopen("D:\\txt.txt", "r", stdin);43     while (gets(s))44     {45         memset(num, 0, sizeof(num));46         n = strlen(s);47         for (int i = n - 1; i >= 0; i--)48         {49             num[n - 1 - i] = s[i] - 0;50         }51         bool flag = false;52         for (int i = 2; i <= n; i++)53         {54             if (cacl(i))55             {56                 if (!judge())57                 {58                     printf("%s is not cyclic\n", s);59                     flag = true;60                     break;61                 }62             }63             else64             {65                 printf("%s is not cyclic\n", s);66                 flag = true;67                 break;68             }69         }70         if (!flag)71             printf("%s is cyclic\n", s);72     }73     return 0;74 }

 

POJ 1047 Round and Round We Go