题目大意:
给出 n 和 k,请你求出 n^k 次方的前三位和后三位。
解题思路:
后三位用快速幂,不加赘述。
求前三位的方法:
AC代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 5 using namespace std; 6 typedef long long ll; 7 8 int Fase_Power(ll a,int m){ 9 int ret=1; 10 a%=1000; 11 while(m){ 12 if(m&1) ret=ret*a%1000; 13 m>>=1; 14 a=a*a%1000; 15 } 16 return ret; 17 } 18 int main() 19 { 20 ll n; 21 int T,k; 22 scanf("%d",&T); 23 for(int t=1;t<=T;t++){ 24 scanf("%lld%d",&n,&k); 25 printf("Case %d:",t); 26 double x=fmod(fmod(log10(n),1.0)*(double)k,1.0);//用fmod()取浮点数的小数部分。 27 double ans=pow(10.0,x); 28 ans*=100.0; 29 printf(" %d %03d\n",(int)ans,Fase_Power(n,k)); //注意后三位有前导0的情况。 30 } 31 return 0; 32 }