任何有理数都可以表示为无限循环小数的形式。
本题目要求即是:给出一个数字的循环小数表示法。
例如:
输入:1,5
则输出:
0.2
输入:
1,7
则输出:
0.[142857]
输入:
7,6
则输出:
1.1[6]
用户输入的格式是:
整数,整数
每个整数范围均为:1~1000
程序输出两个整数做除法产生的小数或无限循环小数(循环节用方括号括起)。
#include <iostream>
using namespace std;
int main()
{
int m,n;
char s;
while(cin>>m>>s>>n)
{
int st=-1,en=-1,t=0,dot=-1;
char result[100];
char mod[100];
while(m/n!=0)
{
result[t]=m/n+'0';
m=m%n;
mod[t]=m+'0';
t++;
}
dot=t;
result[t]='.';
mod[t]='.';
t++;
while(m!=0)
{
m=m*10;
int flag=1;
for(int i=dot+1; i<t; i++)
if(mod[i]==(m%n+'0')&&result[i]==(m/n+'0'))
{
st=i;
en=t;
flag=0;
break;
}
if(flag==0)
break;
if(flag==1)
{
result[t]=m/n+'0';
m=m-m/n*n;
mod[t]=m+'0';
t++;
}
}
if(dot==0)
cout<<"0";
for(int i=0; i<t; i++)
{
if(i==st)
cout<<"["<<result[i];
else
cout<<result[i];
}
if(en!=-1)
cout<<"]";
cout<<endl;
}
return 0;
}