zoukankan      html  css  js  c++  java
  • D

    题解:求n^k的前三位和后三位。

    后三位直接快速幂对1000去余就可以了。前三位可以转换成浮点数来操作,也是用快速幂,我们只保留答案的前三位,当前值大于1000.0的话就除以10,直到结果小于等于1000.0。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll ksm(ll a,ll b){
        ll res=1;
        while(b){
            if(b&1) res=res*a%1000;
            a=a*a%1000;
            b>>=1;
        }
        return res;
    }
    void getnum(double &x){
        while(x>=1000.0) x/=10;  
    }
    void solve(ll time){
        ll n,k;
        cin>>n>>k;
        ll c=ksm(n,k);
        double res=1.0,a=n*1.0;
        while(k){
            if(k&1){
                res=res*a;
                getnum(res);
            }
            a=a*a;
            getnum(a);
            k>>=1;
        }
        ll ans=res;
        
        printf("Case %d: %lld %03lld
    ",time,ans,c);
    }
    int main(){
        ll t;
        cin>>t;
        for(ll i=1;i<=t;i++) solve(i);
        return 0;
     } 

     

  • 相关阅读:
    js 那些事二 javascript中的闭包理解
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java单体应用
    Java入门
    Java入门
    Java入门
  • 原文地址:https://www.cnblogs.com/Accepting/p/12615152.html
Copyright © 2011-2022 走看看