您的位置:首页 > 其它

noj一道简单的数学题

2013-04-05 17:14 204 查看
今天我突然找到一种让自己提高成就感的学习方法,就是把自己喜欢的算法专题和自己不会的算法专题一起学习,然后我选择了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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: