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;
}

posted @ 2011-05-03 22:20  Ac_smile  阅读(435)  评论(0编辑  收藏  举报