Left digit

题目大意:

        给定一个正整数n(1 <= n <= 100,000,000),求n的n次方的最左边一个数是几。

--------------------------

解题思路:

        我的第一反应是模拟。。结果当然是超时了。。。汗

        之后想到这么大的指数,通常是用Log来搞。。于是,顺理成章的推出了下面的公式:

            设m = n ^ n。

                --->   lg(m) = n lg(n)

                --->   m = 10 ^ (n lg(n))

            设 n lg(n) = a + b ,其中a为整数部分,b为小数部分。

                --->   m = 10 ^ a  + 10 ^ b

            推到这里。。实际上就是科学计数法了。所以10^b的第一位非零数就是我们要求的数了,于是:

            用m和10 ^ a一比,得到 10 ^ b的值。然后用强制类型转换把小数部分舍去或者用格式控制符不输出小数部分就OK了。。

--------------------------

P.S:转换思路之后,代码写起来都容易多了。。

原文地址:https://www.cnblogs.com/wuhenqs/p/2846646.html