Lightoj1282——Leading and Trailing(幂取模求前三位)
来源:互联网 发布:曦力mac破解版 编辑:程序博客网 时间:2024/06/08 05:20
Description
You are given two integers: n and k, your task is to find the most significant three digits, and least significant three digits of nk.
Input
Input starts with an integer T (≤ 1000), denoting the number of test cases.
Each case starts with a line containing two integers: n (2 ≤ n < 231) and k (1 ≤ k ≤ 107).
Output
For each case, print the case number and the three leading digits (most significant) and three trailing digits (least significant). You can assume that the input is given such that nk contains at least six digits.
Sample Input
5
123456 1
123456 2
2 31
2 32
29 8751919
Sample Output
Case 1: 123 456
Case 2: 152 936
Case 3: 214 648
Case 4: 429 296
Case 5: 665 669
题解看了很久终于看懂了,总之就是要把大数转化成整数和小数的形式。
任何数n可以化成10^a,而本题是求n^k,所以n=10^(a*k)=10^(i+d)=10^i*10^d,其中i是a*k的整数部分,d是a*k的小数部分。
d可以由fmod(a*k,1)求出,fmod的作用是求浮点数的模,所以这个式子能求出a*k小于1的部分即小数部分。前面又可以根据n=10^a得a=log10(n)。
接着看10^i*10^d,现在就差i,容易想到i是控制小数的位数,因为i是整数嘛,现在要求前三位,所以i=2就行了。
所以最后求前三位的公式就出来了:pow(10,fmod(log10(n)*k,1)+2),可以直接隐式转换成int型去掉小数部分。
后三位用快速幂就行,
另外还有一个坑点,后三位算出来可能是0,所以要格式化成三位0(真坑)
#include <iostream>#include <cstring>#include <string>#include <vector>#include <queue>#include <cstdio>#include <map>#include <cmath>#include <algorithm>#define INF 0x3f3f3f3f#define MAXN 1000005#define mod 1000000007using namespace std;int pow_mod(int a, int n,int m){ if(n==1) return a%m; int x=pow_mod(a,n/2,m); long long ans=(long long)x*x%m; if(n&1) ans=ans*a%m; return (int)ans;}int main(){ int t,cnt=1; long long n,k; scanf("%d",&t); while(t--) { scanf("%lld%lld",&n,&k); int lead=pow(10,fmod(log10(n)*k,1)+2); int trail=pow_mod(n,k,1000); printf("Case %d: %d %03d\n",cnt++,lead,trail); } return 0;}
- Lightoj1282——Leading and Trailing(幂取模求前三位)
- lightoj1282 - Leading and Trailing
- Leading and Trailing LightOJ1282
- lightoj1282 - Leading and Trailing(水题)
- Lightoj1282(HDOJ1060) - Leading and Trailing
- lightoj1282:Leading and Trailing(数论)
- LightOJ1282 Leading and Trailing(截取前n位输出)
- LightOJ1282 Leading and Trailing 大数取首尾
- Lightoj 1282 Leading and Trailing(前三后三位,学习fmod())
- UVA - 11029Leading and Trailing(快速幂取模取后三位 + log10()取前三位)
- LightOJ 1282 Leading and Trailing(n阶的前三位,后三位)
- LightOJ 1282 - Leading and Trailing (求n^k的前三位和后三位)
- LightOJ 1282 Leading and Trailing(n^k的高三位和低三位)
- lightoj 1282 Leading and Trailing(求n^k的前三位后三位)
- Leading and Trailing (快速取模和数字取前三位)
- uva11029 - Leading and Trailing n^k保留前三位
- UVa 11029 Leading and Trailing (如何计算n^k的开头三位和末尾三位?)
- UVa 11029 Leading and Trailing (如何计算n^k的开头三位和末尾三位?)
- kvm module之run vcpu
- 括号配对问题
- 生活中的数学 —— 几何
- selenium之 如何控制网页内嵌div中滚动条的滚动
- HDU 1712 ACboy needs your help
- Lightoj1282——Leading and Trailing(幂取模求前三位)
- HDU3336Count the string
- 求解最小数字:暴力破解 外加 对字符串的使用
- HDU 1811 Rank of Tetris (拓扑排序+并查集)
- Must Know Tips/Tricks in Deep Neural Networks
- Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()调用
- 最小生成树
- android 中include引用的误区。
- ios--网页js调用oc代码+传递参数+避免中文参数乱码的解决方案(实例)