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;
     } 

     

  • 相关阅读:
    如何删除.DS_Store文件?
    STL 技巧整理 7/22
    贪心
    防线
    bfs&dfs模板
    并查集学习总结
    二叉树相关代码
    区间DP学习笔记
    多算法模板整理
    防线题解
  • 原文地址:https://www.cnblogs.com/Accepting/p/12615152.html
Copyright © 2011-2022 走看看