首页 > 代码库 > N分之一 竖式除法模拟

N分之一 竖式除法模拟

N分之一

Description


Alice越来越痴迷于数学问题了。一天,爸爸出了个数学题想难倒她,让她求1 / n。

可怜的Alice只有一岁零九个月,回答不上来 ~~~~(>_<)~~~~  于是她求你编个程序帮她算出来。

Input

第一行是一个整数T,表示测试组数。接下来T行,每行一个整数 n ( 1 ≤ |n| ≤ 105 )。

Output

以实数形式输出1/n 。如果是无限循环小数的,只需输出第一个循环节。

Sample Input

4
2
3
7
168

Sample Output

0.5
0.3
0.142857
0.005952380

注意一点 如果被除数在之前出现过的话 那么接下来出现的就是循环节

#include<bits/stdc++.h>
int main()
{
    int n;
    bool vis[100000];
    int t;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d", &n);
        if(n == 1)
        {
            printf("1\n");
            continue;
        }
        else if(n == -1)
        {
            printf("-1\n");
            continue;
        }

        memset(vis,0,sizeof(vis));
        if(n < 0)
        {

            n = -n;
            printf("-");
        }


            printf("0.");

        int x,k =1;
        int ans[10000];
        int cnt = 0;
        vis[k] = 1;
        while(k)
        {
            k *= 10;
            ans[cnt++] = k/n;
            k %= n;
            //printf("---------%d\n",k);
            if(vis[k])
            {
                break;
            }
            vis[k] = true;
        }
        for(int i = 0; i < cnt; i++)
            printf("%d", ans[i]);
        printf("\n");
        //printf("%d\n",k);

    }
}

 

N分之一 竖式除法模拟