欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hdu 1060

程序员文章站 2024-01-12 09:33:58
...

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.

这到题就是和hdu1568差不多的一道题,是他的简化版,主要是使用了log以10为底的强大功,对n^n取对数,求出其小数部分t,然后pow(10.0,t)向下取整就求出最左边一位的值。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#define pi acos(-1)
#define e exp(1)
#define For(i, a, b) for(int (i) = (a); (i) <= (b); (i) ++)
#define Bor(i, a, b) for(int (i) = (b); (i) >= (a); (i) --)
#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((a)<(b))?(a):(b))
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
#define eps 1e-7
using namespace std;
typedef long long ll;
const int maxn = 100 + 10;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-10;
const ll mod = 1e9 + 7;
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
inline int read(){
    int ret=0,f=0;char ch=getchar();
    while(ch>'9'||ch<'0') f^=ch=='-',ch=getchar();
    while(ch<='9'&&ch>='0') ret=ret*10+ch-'0',ch=getchar();
    return f?-ret:ret;
}
ll n;
int main(){
	ios::sync_with_stdio(false);
	ll p;
	cin >> p;
	while(p--){
		cin >> n;
		double ans = (n*log(double(n)))/log(10);
		ans -= floor(ans);
		double t = pow(10.0, ans);
		cout << int(t) << endl;
	}
	return 0;
}

继续努力加油。