简单分数化小数
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
#include<queue>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
int done[3001],da[3001],st,en;
void dfs(int n,int m,int place)
{
if(!done[n])done[n]=place;
else {st=done[n];en=place;return ;}
da[place]=n*10/m;
dfs(n*10%m,m,place+1);
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(done,0,sizeof done);
memset(da,0,sizeof da);
dfs(n%m,m,1);
printf("%d/%d = %d.",n,m,n/m);
int i;
for(i=1;i<st;i++)
putchar('0'+da[i]);
putchar('(');
for(int num=0;i<en&&num<=50;i++,num++)
if(num!=50)putchar('0'+da[i]);
else printf("...");
printf(")\n %d = number of digits in repeating cycle\n\n",en-st);
}
return 0;
}