zoukankan      html  css  js  c++  java
  • Leading and Trailing

    题目

    题意:求n^k的前3位和后3位。 

    后3位用快速幂求;求前3位需要知道:一个数n,它可以写成10^x,其中这个x为浮点数,则n^k=(10^x)^k=10^x*k=(10^A)*(10^B);其中A,B分别是x*k的整数部分和小数部分。n^k 它的位数由(10^A)决定,它的位数上的值则有(10^B)决定,因此我们要求n^k的前三位,只需要将10^B求出,再乘以100,就得到了它的前三位。

    将A和B分离可以用到一个函数modf():   B = modf(k*log10(n),&A);

    modf()是分解x,以得到x的整数和小数部分。

    double modf(double x,double *integer)

    返回x的小数部分,符号与x相同。

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    using namespace std;
    typedef long long ll;
    ll qpow(ll n,ll k,int mod)
    {
        ll ans = 1,base = n;
        while(k)
        {
            if(k&1)
                ans = ans * base%mod;
                base=base*base%mod;
              k = k >>1;
        }
        return ans%mod;
    }
    int main()
    {
        int T,n,k;cin>>T;
        double A,B;
        int ans1,ans2;
        int Case=1;
        while(T--)
        {
            cin>>n>>k;
             ans2 = qpow(n,k,1000);
             B = modf(k*log10(n),&A);
             ans1 = pow(10,B)*100;
            printf("Case %d: %d %03d
    ",Case++,ans1,ans2);
        }
        return 0;
    }
    
  • 相关阅读:
    SQL每日一题(20200512)
    SQL每日一题(20200506)
    SQL每日一题(20200509)
    sql每日一题(20200423)
    Oracle内存全面分析
    dbms_output.put与put_line
    oracle xml操作
    超级强大的破解极验滑动验证码--讲解非常详细
    python开发---目录
    Flask大全
  • 原文地址:https://www.cnblogs.com/qie-wei/p/12094129.html
Copyright © 2011-2022 走看看