比赛 2009noip模拟试卷 评测结果 AAAAAAAAA
题目名称 分数化小数 最终得分 100
用户昵称 kxxy 运行时间 0.009 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2016-10-09 16:37:23
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. using namespace std;
  5.  
  6. int n,d;
  7.  
  8. inline int gcd(int x,int y)
  9. {
  10. if(x==0)
  11. return y;
  12. return gcd(y%x,x);
  13. }
  14.  
  15. inline int cir()
  16. {
  17. int dd=d;
  18. int c2=0,c5=0;
  19. while(dd%2==0)
  20. c2++,dd/=2;
  21. while(dd%5==0)
  22. c5++,dd/=5;
  23. return max(c2,c5);
  24. }
  25.  
  26. int main()
  27. {
  28. freopen("fracdec.in","r",stdin);
  29. freopen("fracdec.out","w",stdout);
  30. cin>>n>>d;
  31. double x;
  32. int t,len,b;
  33. t=gcd(n,d);
  34. n/=t,d/=t;
  35. cout<<n/d<<'.';
  36. x=(double)n/(double)d;
  37. if(n>=d)
  38. len=(int)ceil(log10(x))+1;
  39. else
  40. len=2;
  41. b=cir();
  42. n%=d;
  43. bool flag=false;
  44. if(n==0)
  45. {
  46. cout<<0<<endl;
  47. return 0;
  48. }
  49. for(int i=1;i<=b;i++)
  50. {
  51. n*=10;
  52. cout<<n/d;
  53. n%=d;
  54. if(n==0)
  55. flag=true;
  56. len++;
  57. if(len%76==0)
  58. cout<<endl;
  59. }
  60. t=n;
  61. if(flag)
  62. return 0;
  63. cout<<"(";
  64. do
  65. {
  66. n*=10;
  67. cout<<n/d;
  68. n%=d;
  69. len++;
  70. if(len%76==0)
  71. cout<<endl;
  72. }while(n!=t);
  73. cout<<")";
  74. return 0;
  75. }