1. 程式人生 > >LightOJ - 1282 -Leading and Trailing

LightOJ - 1282 -Leading and Trailing

problem 整數 src algorithm name closed style splay -128

題目鏈接: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