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             else
64             {
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 }
时间: 2024-10-24 11:50:14

POJ 1047 Round and Round We Go的相关文章

POJ 1047 Round and Round We Go 最详细的解题报告

题目链接:Round and Round We Go 解题思路:用程序实现一个乘法功能,将给定的字符串依次做旋转,然后进行比较.由于题目比较简单,所以不做过多的详解. 具体算法(java版,可以直接AC) 1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 Scanner scanner = new Scanner(System.in); 7 Stri

【POJ 1584】 A Round Peg in a Ground Hole (判凸包+判圆在凸包内)

[POJ 1584] A Round Peg in a Ground Hole (判凸包+判圆在凸包内) 这题题面是一大坑..长长的 明显是给我这种英语渣准备的... 大体意思是给出一个多边形的点 按顺时针或逆时针给出 判断是否为凸包 同时给出一个圆(圆心坐标+半径) 问这个圆在不在多边形内 首先顺逆时针不确定 我的做法是输入时先判断顺时针还是逆时针输入 然后统统变成逆时针来走 就是根据两种情况传入不同的枚举起点 终点 和加减(具体见代码 判凸包用建凸包的叉成法即可 既然逆时针走 那么如果是凸包

poj1047 Round and Round We Go

Round and Round We Go Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12064   Accepted: 5630 Description A cyclic number is an integer n digits in length which, when multiplied by any integer from 1 to n, yields a"cycle"of the digit

poj 2942--Knights of the Round Table (点的双连通分量)

做这题简直是一种折磨... 有n个骑士,骑士之间相互憎恨.给出骑士的相互憎恨的关系. 骑士要去开会,围成一圈坐,相互憎恨的骑士不能相邻.开会骑士的个数不能小于三个人.求有多少个骑士不能开会. 注意:会议可以开无数次,也就是说一个骑士其实是可以开多次会议的,所以一共可以开会的人也未必是奇数. 求出相互并不憎恨的骑士的关系图,也就是相连的骑士可以挨着.这样如果有一个奇数圈就可以确定一圈的人全部可以参加会议. 性质:如果一个双连通分量内的某些顶点在一个奇圈中(即双连通分量含有奇圈),那么这个双连通分量

POJ 2942Knights of the Round Table(二分图判定+双连通分量)

题目链接 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <algorithm> 5 #include <stack> 6 #include <vector> 7 using namespace std; 8 const int Max = 1010; 9 vector<int> G[Max], bcc[Max]; 10 i

Round and Round We Go

http://acm.hdu.edu.cn/showproblem.php?pid=1313 考查大整数与小整数相乘 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define N 70 6 using namespace std; 7 int main() 8 { 9 char str[N],a[N][N]; 10 int len,i

【贪心】【multiset】Tinkoff Challenge - Final Round (Codeforces Round #414, rated, Div. 1 + Div. 2) C. Naming Company

考虑两个人,先把各自的集合排个序,丢掉一半,因为比较劣的那一半一定用不到. 然后贪心地放,只有两种决策,要么把一个最优的放在开头,要么把一个最劣的放在结尾. 如果我的最优的比对方所有的都劣(或等于),我就把我最劣的往结尾放.否则我把我最优的往开头放. 用multiset维护两人的集合即可. #include<cstdio> #include<cstring> #include<algorithm> #include<set> using namespace

Educational Codeforces Round 26-D. Round Subset

题目大意:给你n个数字(小于1e18),从n个数中取k个数字相乘,使其后缀0最多,问你后缀0最多是多少. 知道得用三维的dp[ i ] [ j ] [ k ]  第一维表示用到第 i 个数为止,j 表示从中选 j 个数,想了好久也不知道 第三维是什么,我想不到怎么总结当前状况相乘之后 0 的个数QAQ. 思路:其实后面0的个数就是相乘之后有多少个10,10可以分解成 2 * 5,这样我们只要统计每个数字中 有多少个2的因子和5的因子就好了.dp [ i ][ j ][ k ]表示,在(1 - i

【HDOJ】1313 Round and Round We Go

大数乘,果断java A了. 1 import java.util.Scanner; 2 import java.lang.StringBuilder; 3 import java.math.BigInteger; 4 5 public class Main { 6 public static void main(String[] args) { 7 Scanner cin = new Scanner(System.in); 8 while (cin.hasNextLine()) { 9 Str