usaco2.4.6分数化小数

来源:互联网 发布:unity3d游戏开发流程 编辑:程序博客网 时间:2024/06/06 04:18

思路是对的,只可惜判断循环小数的方法错了,我竟然一个一个比过去233,如果我好好用hash的话,这一题就秒过了,o(︶︿︶)o 唉,hash。。。。。。

#include<iostream>

#include <cmath>
#include <cstdio>
using namespace std;
int yushu[1000002],k=0,k1=0,k2=0;
struct aaa{bool a1;int wei;}hash[1000002];
void huanhuang(void);
int main()
{
  //freopen("fracdec.in","r",stdin);
  //freopen("fracdec.out","w",stdout);
  int n,shu;
  cin>>n>>shu;
  if(n<shu){cout<<0;
  huanhuang();}
  while(n>=shu){
    cout<<n/shu;
    int ll=n/shu,i;
    for(i=0;ll>0;i++)
        ll/=10;
    k+=i;
    n%=shu;
  }
  cout<<'.';
  huanhuang();
  if(n==0){cout<<0<<endl;return 0;}
  while(n!=0)
  {
      if(!hash[n].a1){yushu[++k1]=n;hash[n].a1=true;hash[n].wei=k1;}
      else {k2=hash[n].wei;break;}
      n=n*10%shu;
  }
  if(n==0){for(int i=1;i<=k1;i++){printf("%d",yushu[i]*10/shu);huanhuang();}
  cout<<endl;
  }
  else {
    for(int i=1;i<k2;i++)
        {printf("%d",yushu[i]*10/shu);huanhuang();}
  cout<<'(';
  huanhuang();
  for(int i=k2;i<=k1;i++)
    {printf("%d",yushu[i]*10/shu);huanhuang();}
  cout<<')'<<endl;
  }


return 0;
}
void huanhuang(void)
{
    k++;
    if(k==76){cout<<endl;k=0;}
}
0 0
原创粉丝点击