题目链接: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 }
时间: 2024-12-10 02:06:21