Posted on 2010-08-06 14:51
MiYu 阅读(412)
评论(0) 编辑 收藏 引用 所属分类:
ACM ( 数论 )
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=1060题目描述:
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
解题思路:
m=n^n,两遍分别对10取对数得 log10(m)=n*log10(n),得m=10^(n*log10(n)),由于10的任何整数次幂首位一定为1,所以m的首位只和n*log10(n)的小数部分有关
代码如下 :
//MiYu原创, 转帖请注明 : 转载自 ______________白白の屋
#include <iostream>
#include <cmath>
using namespace std;
typedef long long int64;
int main()
{
int64 N,i,a,sum;
double s,num,x;
cin >> N;
while ( N -- )
{
cin >> num;
s = num * log10 ( num );
a = ( int64 ) s;
x = s - a;
sum = ( int64 ) pow ( ( double ) 10, ( x ) );
cout << sum << endl;
}
return 0;
}