LightOJ1282 Leading and Trailing(截取前n位输出)
2017-03-21 15:24
375 查看
题意:
输入n^k,输出n^k的前3位与后3位.
思路:
最后的三位可以直接快速幂取余,但要注意不够要补前导0.求前三位则需要一些数学知识对于给定的一个数n,它可以写成10^a,其中这个a为浮点数,则n^k=(10^a)^k=10^a*k=(10^x)*(10^y);
其中x,y分别是a*k的整数部分和小数部分对于t=n^k这个数,它的位数由(10^x)决定,它的位数上的值则有(10^y)决定,因此我们
要求t的前三位,只需要将10^y求出,再乘以100,就得到了它的前三位。
fmod(x,1)可以求出x的小数部分
tmp就是上面说的y
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<cmath> using namespace std; typedef long long ll; const ll mod = 1000; int fast_pow(ll tmp, ll k) { tmp = tmp % mod; int ans = 1; while(k) { if(k&1) ans = (ans*tmp) % mod; k >>= 1; tmp = tmp*tmp % mod; } return ans; } int main() { int T; ll n, k; scanf("%d", &T); for(int kase = 1; kase <= T; kase++) { scanf("%lld%lld", &n, &k); int x = (int)pow(10.0, 2.0+fmod(k*log10(1.0*n), 1)); int y = fast_pow(n, k); printf("Case %d: %d %03d\n", kase, x, y); } return 0; }
相关文章推荐
- lightoj1282:Leading and Trailing(数论)
- 【LightOJ】1282 - Leading and Trailing(快速幂 & 数论)
- Leading and Trailing LightOJ - 1282(快速幂)
- LightOJ 1282 Leading and Trailing
- LightOJ1282 Leading and Trailing
- 快速幂 LightOJ 1282 - Leading and Trailing
- LightOJ 1282 Leading and Trailing (快数幂 + 数学)
- LightOJ - 1282 Leading and Trailing
- lightoj 1282 Leading and Trailing
- B - Leading and Trailing ——LightOJ - 1282(快速幂)
- lightoj 1282 - Leading and Trailing (数学--log使用)
- Lightoj 1282 (Leading and Trailing)
- lightoj 1282 - Leading and Trailing
- LightOJ - 1282 Leading and Trailing (数论)
- LightOJ - 1282 Leading and Trailing
- LightOJ 1282 Leading and Trailing(n^k的高三位和低三位)
- 1282 - Leading and Trailing ---LightOj1282(快速幂 + 数学)
- lightoj 1282 - Leading and Trailing 【数学】
- 【快速幂 && 公式推导】LightOJ - 1282 Leading and Trailing
- LightOJ1282 - Leading and Trailing(快速幂+数学)