HDU 1060 Leftmost Digit (数学log)

题意:给定一个数n,让你求出n的n次方的第一位数。

析:一看这个n快到int极限了,很明显不能直接做,要转化一下。由于这是指数,我们可以把指数拿下来。

也就是取对数,设ans = n ^ n,两边取以10为底对数 lg(ans) = n * lg(10),然后这个整数部分都是10的多次方,

没什么用,也就是说我们要的小数部分,然后再取指数,就OK了。还要注意要用long long因为可能超int了,第一次忘了,WA了。

代码如下:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
#include <cmath>

using namespace std;
typedef long long LL;

int main(){
    int n, T;  cin >> T;
    while(T--){
        cin >> n;
        double ans = n * log10(n);
        ans -= (LL)ans;//小数部分
        cout << (LL)pow(10, ans) << endl;
    }
    return 0;
}
时间: 2024-11-05 18:02:56

HDU 1060 Leftmost Digit (数学log)的相关文章

HDU 1060 [Leftmost Digit]数学

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1060 题目大意:求N^N的最高位数字. 关键思想:换底公式使结果变为10^(N*log10(N)),再除以10^(digits-1)就OK了. 代码如下: //运用换底公式避免幂运算,取整处理. #include <iostream> #include <cmath> using namespace std; int main(){ int T; double N; cin>&g

HDU 1060 Leftmost Digit (数学/大数)

Leftmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 14954    Accepted Submission(s): 5775 Problem Description Given a positive integer N, you should output the leftmost digit of N^N.

HDU 1060 Leftmost Digit (数论)

Leftmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13680    Accepted Submission(s): 5239 Problem Description Given a positive integer N, you should output the leftmost digit of N^N.

HDU 1060 Leftmost Digit

http://acm.hdu.edu.cn/showproblem.php?pid=1060 题意: 求N^N的首位数字 解法: 取对数orz 不然肯定溢出 n=10^x*m => lgn=x+lg(m) 注意用long long取整 代码: 0MS  1068K #include <cstdio> #include <cmath> using namespace std; int main() { int t, n; scanf("%d", &t

HDU 1061 [Rightmost Digit] 数学方法

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1061 题目大意:求N^N的个位数 关键思想:对1个N来说,乘方时末尾会循环.对所有N来说,结果以20为周期. 代码如下(第一个思想): //cnt为循环节长度 #include <iostream> #include <cmath> using namespace std; int main(){ int T; long long i,N,cnt; cin>>T; whil

&lt;hdu - 1600 - 1601&gt; Leftmost Digit &amp;&amp; Rightmost Digit 数学方法求取大位数单位数字

1060 - Leftmost Digit 1601 - Rightmost Digit 1060题意很简单,求n的n次方的值的最高位数,我们首先设一个数为a,则可以建立一个等式为n^n = a * 10^x;其中x也是未知的: 两边取log10有:lg(n^n) = lg(a * 10^x); 即:n * lg(n)  - x = lg(a); 现在就剩x一个变量了,我们知道x是值n^n的位数-1,a向下取整就是我们要求的数: 所以 按着上面的推导式翻译成代码就可以了(注意:数值的范围和之间的

Leftmost Digit(杭电1060)(求N^N的最高位)

Leftmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13574    Accepted Submission(s): 5216 Problem Description Given a positive integer N, you should output the leftmost digit of N^N.

Leftmost Digit(数学)

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

HDU 1018 Big Number 数学题解

Problem Description In many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data, encryption, etc. In this problem you are given a number, you have to determine the number of