fzu1006

来源:互联网 发布:写轮眼美瞳软件 编辑:程序博客网 时间:2024/06/16 10:04

原理是百度的。

/*循环小数=循环部分+非循环部分,  循环部分=循环数字/10*循环位数,  非循环部分=非循环数字/9和0(非循环位数=9的个数,循环位数=0的个数).*/ /*只要自己手动算一个,就会发现规律如 0.abc...     从a开始循环则m/n=abc/(1000-1),     从b开始循环则m/n=(abc-a)/(1000-10),     从c开始循环则m/n=(abc-ab)/(1000-100);     找到分母最小那个就可以了.*/#include<stdio.h>#include<math.h>#include<string.h>int gcd(int d,int x){int t;while(x){t=d%x;d=x;x=t;}return d;}int main(){char str[25]={0};int fz,fm,t1,t2,z[25],m[25];int i,len,yue,min,mi;while(scanf("%s",str)&&str[1]=='.'){fz=fm=0;len=0;i=2;while(str[i]!='.'){fz=fz*10+(str[i]-'0');len++;i++;}fm=(int)pow(10,len);t1=fz;t2=fm;for(i=len;i>=1;i--){t1/=10;t2/=10;z[i]=fz-t1;m[i]=fm-t2;yue=gcd(m[i],z[i]);z[i]/=yue;m[i]/=yue;}min=m[1];mi=1;for(i=2;i<=len;i++){if(min>m[i]){min=m[i];mi=i;}}printf("%d/%d\n",z[mi],m[mi]);}return 0;}


0 0
原创粉丝点击