poj 1047 模拟(含大数乘法)循环数
来源:互联网 发布:信欣美妆淘宝店假货 编辑:程序博客网 时间:2024/06/05 16:02
题意:给定一个不超过60位的数,判断它是否是可循环的。如果输入字符串num的长为n,则判断num*1,num*2,num*3...num*n,如果每次乘法得到的结果都是num的一个循环,则num为循环数。如:
142857 *1 = 142857
142857 *2 = 285714142857 *3 = 428571
142857 *4 = 571428
142857 *5 = 714285
142857 *6 = 857142
思路:模拟即可,注释有解释。
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include <cstdlib>using namespace std;#define clc(s,t) memset(s,t,sizeof(s))#define INF 0x3fffffff#define N 65char s[N];int d[100],tmp[100],len;int test(int x){ int i,j; for(i = x,j = 0;j<len;i = (i+1)%len,j++) if(tmp[i] != d[j]) return 0; return 1;}int check(int x){ int i,j; clc(tmp, 0); for(i = j = 0;i<len;i++){ //大数乘法 tmp[i] += d[i]*x; tmp[i+1] += tmp[i]/10; tmp[i] %= 10; } if(tmp[i]) //说明乘完的位数增加了,必然不是原数的循环 return 0; for(i = 0;i<len;i++) //如果是原数的循环 if(test(i)) return 1; return 0;}int main(){ while(scanf("%s",s)!=EOF){ int i,j; len = (int)strlen(s); for(i = 0;i<len;i++) //先翻转一下数组,并存成int类型 d[len-1-i] = s[i]-'0'; for(i = 2;i<=len;i++) //len位,1就不用乘了,因为肯定与输入数相同 if(!check(i)) break; if(i <= len) printf("%s is not cyclic\n",s); else printf("%s is cyclic\n",s); } return 0;}
0 0
- poj 1047 模拟(含大数乘法)循环数
- POJ 1001 Exponentiation 大数乘法模拟
- 大数乘法(模拟相乘,分块)
- 51nod1027---大数乘法(51nod基础:乘法模拟)
- 大数的乘法(包括浮点数)
- POJ 1001 Exponentiation (高精度/大数乘法)
- POJ 2389 大数乘法
- POJ 2389大数乘法
- poj中的大数乘法!
- poj 2389 大数乘法
- 【ACM暑假培训】3、模拟算法(99乘法表+方块转换+循环数)
- 蓝桥杯 大数分块乘法 模拟乘法
- poj 2413 大数模拟(区间内的斐波那契数个数)
- 大数乘法(转载:通过C语言数组模拟)
- 模拟乘法运算之N的阶乘(大数阶乘)
- poj 2109 二分+大数乘法
- poj 2389 BullMath(大数乘法)
- POJ 1405 Heritage(模拟+高精度乘法)
- android 实现APK之间的跳转
- C#双击文件只让同一个程序打开文件
- oracle wm_concat函数,用于列转行,逗号分隔
- 记录一些易忘的属性(translucent,edgesForExtendedLayout,automaticallyAdjustsScrollViewInsets)
- Bone Collector II
- poj 1047 模拟(含大数乘法)循环数
- hdu 5294 Tricks Device (最短路+最大流)
- uvalive5798(树状数组)
- android mk脚本的编写
- VC 读写注册表
- 3.4 summary
- spring mvc中的@RequestMapping的用法
- C# UDP(Socket)异步传输文件
- 导致实例逐出的五大问题