UVa 202 Repeating Decimals

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
	int a,b,c;
	while(cin>>a>>b)
	{
		c=a;
		int first=0,p=0,cnt=0,idx=0,i;
		char ans[200]={0};
		ans[p++]=(a/b?a/b:0)+'0';
		if(a){
			a%=b;
			ans[p++]='.';
		}
		int ok=0;
		first=a;
		while(1)
		{	
			a=first;
			cnt=0;
			ans[p++]='(';
			for(i=0;i<b;i++)
			{
				if(cnt<50) ans[p+i]=(a*10/b)+'0';
				a=a*10%b;
				cnt++;
//				cout<<' '<<a<<endl;
				if(first==a){
					ok=1;
					break;
				}
			}
			if(ok) break;
//			puts(ans);
			first=first*10%b;
			swap(ans[p-1],ans[p]);
		}
		if(cnt<50) p=p+cnt;
		else p=50+p;
		if(cnt>=50) for(int j=0;j<3;j++) ans[p++]='.';
		ans[p++]=')';
		ans[p++]='\0';
		printf("%d/%d = %s\n",c,b,ans);
		printf("   %d = number of digits in repeating cycle\n\n",cnt);
	}
	return 0;
}

你可能感兴趣的:(UVa 202 Repeating Decimals)