比赛 |
2009noip模拟试卷 |
评测结果 |
AAAAAAAAA |
题目名称 |
分数化小数 |
最终得分 |
100 |
用户昵称 |
kxxy |
运行时间 |
0.009 s |
代码语言 |
C++ |
内存使用 |
0.31 MiB |
提交时间 |
2016-10-09 16:37:23 |
显示代码纯文本
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- using namespace std;
-
- int n,d;
-
- inline int gcd(int x,int y)
- {
- if(x==0)
- return y;
- return gcd(y%x,x);
- }
-
- inline int cir()
- {
- int dd=d;
- int c2=0,c5=0;
- while(dd%2==0)
- c2++,dd/=2;
- while(dd%5==0)
- c5++,dd/=5;
- return max(c2,c5);
- }
-
- int main()
- {
- freopen("fracdec.in","r",stdin);
- freopen("fracdec.out","w",stdout);
- cin>>n>>d;
- double x;
- int t,len,b;
- t=gcd(n,d);
- n/=t,d/=t;
- cout<<n/d<<'.';
- x=(double)n/(double)d;
- if(n>=d)
- len=(int)ceil(log10(x))+1;
- else
- len=2;
- b=cir();
- n%=d;
- bool flag=false;
- if(n==0)
- {
- cout<<0<<endl;
- return 0;
- }
- for(int i=1;i<=b;i++)
- {
- n*=10;
- cout<<n/d;
- n%=d;
- if(n==0)
- flag=true;
- len++;
- if(len%76==0)
- cout<<endl;
- }
- t=n;
- if(flag)
- return 0;
- cout<<"(";
- do
- {
- n*=10;
- cout<<n/d;
- n%=d;
- len++;
- if(len%76==0)
- cout<<endl;
- }while(n!=t);
- cout<<")";
- return 0;
- }