hdu 1060

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;
}

继续努力加油。

扫描二维码关注公众号,回复: 4009809 查看本文章

猜你喜欢

转载自blog.csdn.net/ab1605014317/article/details/83927277
今日推荐