LightOJ1282 Leading and Trailing

 1 /*
 2  LightOJ1282 Leading and Trailing
 3  http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1282
 4  数论 fmod
 5  fmod题。
 6  求n^k的前三位
 7  n可以写成10^a(a为小数)的形式。
 8  因此原式=10^(ak).
 9  而ak可以写成x+y,其中x为ak的整数部分,y为ak的小数部分
10  所以x决定了位数,y决定了值
11  因此求出y即可。
12  而n=10^a => a=log10(n)
13  fmod(x,1)可以求出x的小数部分
14  因此用fmod(ak,1)即可求出y
15  */
16 #include <cstdio>
17 #include <algorithm>
18 #include <cstring>
19 #include <cmath>
20 #include <vector>
21 #include <queue>
22 #include <iostream>
23 #include <map>
24 #include <set>
25 //#define test
26 using namespace std;
27 const int Nmax=1e6+7;
28 const long long mod=1000;
29 long long qpow(long long base,long long n)
30 {
31     base%=mod;
32     long long ans=1LL;
33     while(n>0)
34     {
35         if(n&1)
36             ans=(ans*base)%mod;
37         base=(base*base)%mod;
38         n>>=1;
39     }
40     ans=ans%mod;
41     return ans;
42 }
43 int main()
44 {
45     #ifdef test
46     #endif
47     int t;
48     scanf("%d",&t);
49     t=0;
50     long long n,k;
51     while(scanf("%lld%lld",&n,&k)==2)
52     {
53         t++;
54         double x=pow(10.0,fmod(k*log10(1.0*n),1)); 
55         x=x*100.0;
56         printf("Case %d: %d %03lld\n",t,(int)x,qpow(n,k));
57     }
58     return 0;
59 }

 

posted @ 2017-04-14 20:02  BBBob  阅读(215)  评论(0编辑  收藏