题解:求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=;
while(b){
if(b&) res=res*a%;
a=a*a%;
b>>=;
}
return res;
}
void getnum(double &x){
while(x>=1000.0) x/=;
}
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&){
res=res*a;
getnum(res);
}
a=a*a;
getnum(a);
k>>=;
}
ll ans=res; printf("Case %d: %lld %03lld\n",time,ans,c);
}
int main(){
ll t;
cin>>t;
for(ll i=;i<=t;i++) solve(i);
return ;
}