zoukankan      html  css  js  c++  java
  • 牛客练习赛43

     B.Tachibana Kanade Loves Probability

    题目链接:

    https://ac.nowcoder.com/acm/contest/548/B 

    题意:

    求出$frac{m}{n}$的$k_{1}$到$k_{2}$位小数

    数据范围:

    $1leq n,m,k_{1},k_{2} leq 10^{9}$  

    $0leq k_{2}-k_{1}leq 10^{5}$

    分析:

    一开始想通过找循环节来做,然后发现循环节大于$10^{5}$时会超时。看别人ac代码发现,其实可以放大m然后求出对n的余数,也就是让$m = m imes 10^{k_{1}-1}\, mathbf{mod}\, n$,之后继续模拟$frac{m}{n}$得到的小数就是题目要求的了

    
    
    

    ac代码:

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll n,m,k1,k2;
    ll qpow(ll x,ll y)
    {
        ll res=1,k=x;
        while(y)
        {
            if(y&1)res=res*k%m;
            k=k*k%m;
            y/=2;
        }
        return res;
    }
    int main()
    {
        //n=1e9;
        //cout<<qpow(10,2)<<endl;
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%lld %lld %lld %lld",&n,&m,&k1,&k2);
            n=n*qpow(10,k1-1)%m;//求出余数
            for(int i=1;i<=k2-k1+1;i++)
            {
                printf("%lld",(n*10)/m);
                n=(n*10)%m;
            }
            printf("
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    BJDCTF-WP
    Python 每日一练(4)
    Python 每日一练(3)
    BUUCTF Crypto
    Python每日一练(1)
    Python 每日一练(2)
    oracle 组函数
    oracle 组函数
    oracle
    前端实战遇到问题
  • 原文地址:https://www.cnblogs.com/carcar/p/10663129.html
Copyright © 2011-2022 走看看