HDU1060 Leftmost Digit

题目描述:

Given a positive integer N, you should output the leftmost digit of N^N.
 
题目分析:
             由于N给的数据是10^9,很显然将N一个个乘起来那就是你不想活了啊。一般对于a^b我们是进行取对数,这道题也不例外。
 
题目转化:
           设 M = N^N , 等式两边去对数 log10 

     log10 ( M ) = log10 ( N^N ) = N * log10 ( N ) 

     再化简过去 可得:  M = 10 ^(  N*log10(N) ) 

     我们假设 N * log10( N )  = A + B     (其中A为整数部分,B为小数部分)

     则有 M = 10^A + 10^B ,  对于整数A, 则10^A必定为 100...0的形式, 而对于10^B ,因为B = [0,1) 所以10^B 属于 [ 1,10 )区间 

     可以得出,对与M的最左边有影响的只有 10^B ,所以结果为   pow( 10 ,  N*log10(N) - floor( N*log10(N) ) ) 

代码:

View Code
 1 #include"stdio.h"
 2 #include"math.h"
 3 int main()
 4 {
 5    int t,n;
 6    scanf("%d",&t);
 7    while(t--)
 8    {
 9          double a;
10          int b;
11          scanf("%d",&n);
12          a=n*1.0*log10(n)-floor(n*1.0*log10(n));
13          b=floor(pow(10,a));
14          printf("%d\n",b);
15    }
16 return 0;
17 }
原文地址:https://www.cnblogs.com/YQH760/p/2853648.html