首页 > 代码库 > LightOJ - 1282 -Leading and Trailing

LightOJ - 1282 -Leading and Trailing

题目链接:https://vjudge.net/problem/LightOJ-1282

题目大意:

给出一个数n,求n^k次方后的数的前三位和后三位的值。

题目分析:

对于数的后三位可以直接用快速幂取模的方法求得。

求数的前三位,可以先对n^k取log10,此时得到

x=k*log10(n),即10^x=n^k.

x=a(x的整数部分)+b(x的小数部分);

此时a决定的是小数点的位置,b决定的是具体的数。

为了求得前三位的数,只需要求得pow(10,2+b)的值即可。

给出代码:

技术分享
 1 #include <cstdio>
 2 #include <iostream>
 3 #include <string>
 4 #include <cmath>
 5 #include <algorithm>
 6 using namespace std;
 7 long long int m_pow(long long int x,long long int k)
 8 {
 9     long long int ans=1;
10     while(k)
11     {
12         if(k&1)
13         {
14             ans=(ans*x)%1000;
15         }
16         x=(x*x)%1000;
17         k=k/2;
18     }
19     return ans;
20 }
21 int main()
22 {
23    int N;
24    cin>>N;
25    int cnt=0;
26    while(N--)
27    {
28        long long int n,k;
29        cin>>n>>k;
30        int num1=(int)m_pow(n,k);
31        double h=fmod(k*log10(1.0*n),1.0);
32        int s=(int)pow(10.0,h+2.0);
33        printf("Case %d: %d %03d\n",++cnt,s,num1);
34    }
35    return 0;
36 }
View Code

 

LightOJ - 1282 -Leading and Trailing