1 solutions

  • 0
    @ 2022-12-3 10:59:09

    emmmm,首先我们要注意数据的范围n(1 <= |n| <= 10^5).这里的n可以是负数,所以当我们判断他是负数时要在答案前面加个负号

    	if(n<0){
    		printf("-");
            n=abs(n);
    		}
    

    然后当n为一时,我们就根本不用做运算,直接输出就是了

    if(n==1){
            printf("1\n");
            continue;
            }
    
    

    最后就的对n这个数进行运算,结果一定是小于0的数,所以我们先输出0.就行

    
    printf("0.");
    
    

    因为是1除以一个数,当我们除不尽我们是不是就要向后移动一位,然后借一个0,就变成10,再除,如果还是除不尽,我们是不是就要继续借0,依次下去。我们就可以,当余数是我们之前遇到过的,说明就到了循环点了,我们就直接退出循环,结束运算;如果没有遇到,我们是不是继续借0来进行除法。

    int i=1;
            flage[1]=true;
            while(i){
                i*=10;
                printf("%d",i/n);
                i%=n;
                if(flage[i])break;
                flage[i]=true;
            }
    
    

    这就是整合代码

    
    #include<iostream>
    #include<cstdio>
    #include<string.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<algorithm>
    #include<stack>
    #include<queue>
    #define lowbits(x) ((-x)&x)
    using namespace std;
    const int INF = 0x3f3f3f3f;
    const int N = 1e6+5;
    typedef long long ll;
    int gcd(int a,int b)
    {
        return b>0 ? gcd(b,a%b):a;
    }
    int n,m;
    int a[N];
    int find(int n,int x){
        int l=-1,r=n;
        while(l+1<r){
            int mid = l+r>>1;
            if(a[mid]<=x) l =mid;
            else r=mid;
        }
        return r;
    }
    bool flage[N];
    int main()
    {
        ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
        int n;
        int t;
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            memset(flage,false,sizeof(flage));
            if(n<0){
                printf("-");
                n=abs(n);
            }
            if(n==1){
                printf("1\n");
                continue;
            }
            printf("0.");
            int i=1;
            flage[1]=true;
            while(i){
                i*=10;
                printf("%d",i/n);
                i%=n;
                if(flage[i])break;
                flage[i]=true;
            }
        printf("\n");
        }
        return 0;
    }
    
    

    Information

    ID
    6674
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    (None)
    # Submissions
    98
    Accepted
    16
    Uploaded By