思路是对的,只可惜判断循环小数的方法错了,我竟然一个一个比过去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;}
}