N分之一
Input
第一行是一个整数T,表示测试组数。接下来T行,每行一个整数 n ( 1<= |n| <=10^5 )。
Output
以实数形式输出1/n 。如果是循环小数的,只输出第一个循环节。
非循环节部分的长度k=max{abs(分子分母2的因子个数之差),abs(分子分母5的因子个数之差)}
然后再输出直到重复为止就好了。
#include"iostream"
using namespace std;
int before(int n) //计算非循环节长度k
{
int c2=0,c5=0;
while(n%2==0)
{
c2++;
n/=2;
}
while(n%5==0)
{
c5++;
n/=5;
}
if(c2>=c5)
return c2;
return c5;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
if(n<0)
{ cout<<"-";n*=-1;}
if(n==1){cout<<1<<endl;continue;}
cout<<"0.";
int count=(before(n));
int i,k=1;
for(i=0;i<count;i++)
{
k*=10;
cout<<k/n;
k%=n;
}
int r=k;
if(r!=0)
{
do
{
k*=10;
cout<<k/n;
k%=n;
}while(k!=r);
}
cout<<endl;
}
return 0;
}