POJ 1047Round and Round We Go——大数乘法+匹配
2014-07-21 15:44
239 查看
题目链接点击打开链接
题意:给定一个n位数,判断该数乘以i (1<=i<=n)是否还由该数的各个位上的数通过改变顺序组成。
思路:很明显,题中的数的位数最多60位,显然要用到大数乘法。不过,这道题是一个大数乘以一个小数,比较简单。如果乘以i后位数变大了,很明显该数就不是cyclic。在位数相同的情况下再判断。只要将得到的大数sort一下,再和初始给的数sort以后的值一位一位比较就可以了。easy~~~
开始时把给的数直接sort了。。。傻逼掉了
AC代码
题意:给定一个n位数,判断该数乘以i (1<=i<=n)是否还由该数的各个位上的数通过改变顺序组成。
思路:很明显,题中的数的位数最多60位,显然要用到大数乘法。不过,这道题是一个大数乘以一个小数,比较简单。如果乘以i后位数变大了,很明显该数就不是cyclic。在位数相同的情况下再判断。只要将得到的大数sort一下,再和初始给的数sort以后的值一位一位比较就可以了。easy~~~
开始时把给的数直接sort了。。。傻逼掉了
AC代码
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<iomanip> #include<algorithm> #include<cmath> using namespace std; int tmp[100],a[1000],acopy[1000],len; bool multi(int n)//大数乘法 { int i,t=0; for(i=0; i<len; i++) { t=a[i]*n+t; tmp[i]=t%10; t/=10; } if(t>0) return false;//判断最后是否会进位 return true; } bool judge(int n) { if(!multi(n))//有进位直接返回false return false; sort(tmp,tmp+len);//开始匹配~~~ for(int i=0; i<len; i++) if(tmp[i]!=acopy[i]) return false; return true; } int main() { char num[1000]; while(scanf("%s",num)!=EOF) { int cnt=0,flag=1; len=strlen(num); for(int i=len-1; i>=0; i--) { a[cnt]=num[i]-'0'; acopy[cnt]=a[cnt]; cnt++; } sort(acopy,acopy+len);//将给定的数sort for(int i=2; i<=len; i++) { if(!judge(i)) { flag=0; printf("%s is not cyclic\n",num); break; } } if(flag) printf("%s is cyclic\n",num); } return 0; }
相关文章推荐
- poj 2389 BullMath(大数乘法)
- poj2389 普通的大数乘法
- 大数乘法 poj 2389 ||大数乘法 hdu1402 FFT模板
- 大数乘法——POJ 1001
- 简单题POJ-1001,大数乘法
- POJ 1001 Exponentiation (高精度/大数乘法)
- POJ 2389 大数乘法
- POJ 1001 大数的乘法
- poj中的大数乘法!
- POJ 2389大数乘法
- POJ 3101 Astronomy 解题报告(大数乘法+分数最小公倍数)
- POJ 1001 Exponentiation 无限大数的指数乘法 题解
- POJ2389 FFT 大数乘法
- POJ-1001 求高精度幂-大数乘法系列
- poj 2389 大数乘法
- poj2389---大数乘法
- poj 2389 解题报告 大数乘法
- poj 2109 二分+大数乘法
- POJ 2389 Bull Math(大数乘法,还是Java好)
- POJ 2389 Bull Math 高精度(大数)乘法 模板