题解:求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\n",time,ans,c); } int main(){ ll t; cin>>t; for(ll i=1;i<=t;i++) solve(i); return 0; }