(hdu 1060 ,1061)求N^N的最高位和最低位(取对数,快速幂)
2017-08-18 12:31
381 查看
hdu 1060 Leftmost Digit
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 18542 Accepted Submission(s): 7302
Problem Description
Given a positive integer N, you should output the leftmost digit of N^N.
Input
The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Output
For each test case, you should output the leftmost digit of N^N.
Sample Input
2
3
4
Sample Output
2
2
Hint
In the first case, 3 * 3 * 3 = 27, so the leftmost digit is 2.
In the second case, 4 * 4 * 4 * 4 = 256, so the leftmost digit is 2.
Author
Ignatius.L
题意:求n^n(1<=n<=10^9)的最左边的数
分析:对于任意一个大于1的数可以用科学计数法表示,因此
设n^n=a.b*10^k,a为整数位的数,b为小数位的数,k为指数(整数), a就是题目所求
两边取对数, nlg(n)=lg(a.b*10^k)=lg(a.b)+k
即能求出a=(int)pow(10,nlg(n)-k)
hdu 1061 Rightmost Digit
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 57677 Accepted Submission(s): 21848
Problem Description
Given a positive integer N, you should output the most right digit of N^N.
Input
The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Output
For each test case, you should output the rightmost digit of N^N.
Sample Input
2
3
4
Sample Output
7
6
Hint
In the first case, 3 * 3 * 3 = 27, so the rightmost digit is 7.
In the second case, 4 * 4 * 4 * 4 = 256, so the rightmost digit is 6.
Author
Ignatius.L
题意:求n^n的最右边的数
分析:容易知道最右边的数只与n的最低位有关,那么接下来要做的就是求n^n,快速幂就能得到
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 18542 Accepted Submission(s): 7302
Problem Description
Given a positive integer N, you should output the leftmost digit of N^N.
Input
The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Output
For each test case, you should output the leftmost digit of N^N.
Sample Input
2
3
4
Sample Output
2
2
Hint
In the first case, 3 * 3 * 3 = 27, so the leftmost digit is 2.
In the second case, 4 * 4 * 4 * 4 = 256, so the leftmost digit is 2.
Author
Ignatius.L
题意:求n^n(1<=n<=10^9)的最左边的数
分析:对于任意一个大于1的数可以用科学计数法表示,因此
设n^n=a.b*10^k,a为整数位的数,b为小数位的数,k为指数(整数), a就是题目所求
两边取对数, nlg(n)=lg(a.b*10^k)=lg(a.b)+k
即能求出a=(int)pow(10,nlg(n)-k)
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> using namespace std; typedef long long LL; const int mod=1e9+7; const int N=1e5+5; int main() { int T,n; scanf("%d",&T); while(T--) { scanf("%d",&n); double tmp=n*log10(n); double ans=pow(10,tmp-(LL)tmp);///注意这里的tmp可能会溢出,要强制转化为long long // printf("tmp=%.2lf ans=%.2lf\n",tmp,ans); printf("%d\n",(int)ans); } return 0; }
hdu 1061 Rightmost Digit
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 57677 Accepted Submission(s): 21848
Problem Description
Given a positive integer N, you should output the most right digit of N^N.
Input
The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Output
For each test case, you should output the rightmost digit of N^N.
Sample Input
2
3
4
Sample Output
7
6
Hint
In the first case, 3 * 3 * 3 = 27, so the rightmost digit is 7.
In the second case, 4 * 4 * 4 * 4 = 256, so the rightmost digit is 6.
Author
Ignatius.L
题意:求n^n的最右边的数
分析:容易知道最右边的数只与n的最低位有关,那么接下来要做的就是求n^n,快速幂就能得到
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> using namespace std; typedef long long LL; const int mod=1e9+7; const int N=1e5+5; int a ; int pow_mod(int a,int b,int mod) { int ans=1; a%=mod; while(b) { if(b&1) ans=ans*a%mod; b>>=1; a=a*a%mod; } return ans; } int main() { int n,T; scanf("%d",&T); while(T--) { scanf("%d",&n); int ans=pow_mod(n,n,10)%10; printf("%d\n",ans); } return 0; }
相关文章推荐
- 数论 hdu 1060 n^n最高位
- HDU - 1060 Leftmost Digit (数学取对数)规律
- hdu——1060(数论之对数的使用)
- 数学_同取对数(HDU_1060)
- HDU 1060 Leftmost Digit【对数运算】
- hdu 1060 - Leftmost Digit(求N^N最高位)
- Rightmost Digit HDU - 1061 (快速幂问题)
- hdu水题十道,提高鸟语能力~~ 1032 1029 1033 1036 1037 1038 1039 1047 1856 1060 1061
- ACM_HDU 1060+1061 leftmost or rightmost digit(数论)
- HDU 1061 Rightmost Digit(简单快速幂)
- HDU 1060 1061求 n^n 最左边 最右边的数字
- hdu 1060 Leftmost Digit(幂次方最高位)
- hdu1061-Rightmost Digit(附20循环的规律解法和附快速幂简单原理)
- hdu 1061
- HDU——1061 Rightmost Digit
- hdu 1060 Leftmost Digit
- hdu 1060 Leftmost Digit
- hdu 1060_数学
- HDU 1061 Rightmost Digit【快速幂取模】
- hdu 2554 N对数的排列问题 【数学】