求后三位很简单,就是在快速幂的过程中模1000即可。
求前三位比较复杂:
b对应下方代码的y。
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
ll a,b;
int T;
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;
}
int main(){
cin>>T;
int kase = 0;
while(T--){
scanf("%lld %lld",&a,&b);
ll trail = ksm(a,b);
double y = fmod(b*log10(a),1); //取出次方的小数部分
ll head = (ll)(pow(10,y)*100);//计算后,往右移动2位
printf("Case %d: %03lld %03lld\n",++kase,head,trail);
}
return 0;
}