Posted on 2010-08-06 14:51
MiYu 閱讀(419)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
ACM ( 數(shù)論 )
MiYu原創(chuàng), 轉(zhuǎn)帖請(qǐng)注明 : 轉(zhuǎn)載自 ______________白白の屋題目地址:
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,兩遍分別對(duì)10取對(duì)數(shù)得 log10(m)=n*log10(n),得m=10^(n*log10(n)),由于10的任何整數(shù)次冪首位一定為1,所以m的首位只和n*log10(n)的小數(shù)部分有關(guān)
代碼如下 :
//MiYu原創(chuàng), 轉(zhuǎn)帖請(qǐng)注明 : 轉(zhuǎn)載自 ______________白白の屋
#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;
}