今天我突然找到一种让自己提高成就感的学习方法,就是把自己喜欢的算法专题和自己不会的算法专题一起学习,然后我选择了kmp和数论一起,看到这到简单的数学题时第一个想法就是根据奥数小数规则来做
一个最简分数化为小数有三种情况:
(1)如果分母只含有质因数2和5,那么这个分数一定能化成有限小数,并且小数部分的位数等于分母中质因数2与5中个数较多的那个数的个数;(2)如果分母中只含有2与5以外的质因数,那么这个分数一定能化成纯循环小数;
(3)如果分母中既含有质因数2或5又含有以外的质因数,那么这个分数一定能化成混循环小数,并且不循环部分的位数等于分母中质因数2与5中个数较多的那个数的个数。
http://wenku.baidu.com/view/a115698dcc22bcd127ff0c04.html
http://wenku.baidu.com/view/53a96582d4d8d15abe234eab.html
但是由于在这道题里数不是很大,所以我们可以直接根据我们平常算小数的方法来做这道题
#include<stdio.h>
#include<string.h>
#include<math.h>
int ok[100010];
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
int temp=1;
scanf("%d",&n);
if(n<0)
{ n=-n;
printf("-0.");
}
else
printf("0.");
memset(ok,0,sizeof(ok));
while(ok[temp]!=1&&temp!=0) //当它在出现的时候证明有开始重新循环了,如果它所得余数是0的话就是已经除尽了
{
ok[temp]=1;
temp*=10;
printf("%d",temp/n);
temp%=n;
}
printf("\n");
}
return 0;
}