POJ 1047
来源:互联网 发布:php课程表页面代码 编辑:程序博客网 时间:2024/06/05 21:10
题意:判断一个数是不是循环数。
思路:最大的数为60位,故为高精度的计算,用字符数组做即可。处理这个地方有个小技巧、就是在这个数字的后面再加上一遍。以142857为例子,就是判断乘积数是否在142857142857字串中即可。比较简单;但是我提交了几次都WA,不知道怎么原因,看了错误的原因才知道字符串的倒转函数strrev函数不得用,又自己做了个解决才得AC,总的来说还是比较简单的,但是编程量大,又因为倒转函数不知道不能用,所以这道题花费我几个小时才得,效率确实好慢……努力吧……
代码如下:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[65];
while(cin>>a)
{
int l,i,flag;
char b[150];
strcpy(b,a);
strcat(b,a);
l=strlen(a);
for(i=2;i<=l;i++)
{
char c[65];
int k=0,j,sum;
memset(c,'0',sizeof(char)*64);
for(j=l-1;j>=0;j--)
{
if(k==0)
{
if((a[j]-'0')*i>9)
{
c[k++]+=((a[j]-'0')*i)%10;
c[k]+=((a[j]-'0')*i)/10;
}
else c[k++]+=(a[j]-'0')*i;
}
else
{
sum=c[k]-'0'+(a[j]-'0')*i;
if(sum>9)
{
c[k]=sum%10+'0';
k++;
c[k]+=sum/10;
}
else c[k++]+=(a[j]-'0')*i;
}
}
c[k]='\0';
char p[65],q[65];
int w=0,l1,l2;
strcpy(p,c);
l1=strlen(p);
for(l2=l1-1;l2>=0;l2--)
q[w++]=p[l2];
q[w]='\0';
if(strstr(b,q)==NULL)
{
flag=0;
cout<<a<<" is not cyclic"<<endl;
break;
}
else flag=1;
}
if(flag==1) cout<<a<<" is cyclic"<<endl;
}
return 0;
}
- POJ 1047
- poj 1047
- poj 1047
- POJ 1047
- POJ 1047
- POJ 1047
- POJ ACM 1047
- poj 1045,1047
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- Crypto Columns
- Impact使用
- ios 中的file not found的解决方法
- linux下的ldd
- 小for的Cocos2d-x学习笔记与感悟6之Action
- POJ 1047
- linux0.11中switch_to理解
- ML507的配置
- ExecutorService与Executors例子的简单剖析
- 灵活与高效
- Could not copy from: C:/Program Files/CMake 2.8/share/cmake-2.8/Templates/CM
- ExecutorService的execute和submit方法
- javascript插件推荐
- 模块化设计