http://acm.hdu.edu.cn/showproblem.php?pid=2522
分析:循环小数的循环节:以余数是否相同作为判断条件,最后一位应为结果中出现相同的余数那位
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int NM=100005;
int a[NM],h[NM];
int main()
{
int i,j,k,flag,temp,n,num;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&num);
flag=0;
if(abs(num)==1) //+-1
{
printf("%d\n",num);
continue;
}
if(num<0)
{flag=1;num=-num;}
memset(h,0,sizeof(h));
h[1]=1; //1/9,1/3 etc
temp=1; j=0;
while(temp)
{
/*while(temp<num)
{
a[j++]=0;
temp*=10;
}*/
temp*=10;
a[j++]=temp/num;
temp%=num;
if(h[temp]) break; //
h[temp]=1;
}
if(flag) printf("-");
printf("0.");
for(k=0;k<j;k++)
printf("%d",a[k]);
printf("\n");
}
}
return 0;
}