题意本身很好理解,就是求n^n的最高位是什么。
刚开始看,认为和HDU 1061题类似,找出几组数据去找规律。
发现毫无规律可循,只能干想,毫无思路。
看了http://hi.baidu.com/myacmjd/item/8c1637503cf24d9e8c12ed96,及http://hi.baidu.com/%CC%DA%D4%C6%BB%AA%CF%C4/blog/item/c7b7d3038f9e951a728b65dc.html的博客。一下子就理解了。
我对我认识到的总结下。
////////////////////////////////////////
霎时间想到的,认识不对,不过是做题激发出来的,还是留个认识吧,以备遗忘,欢迎补充详细信息。
任意一个数,总能表示成科学计数法。
即 x = m * 10^n (n>=0 && n为整数, m<=0 && m为浮点数)
计算机组成原理一书中曾讲过二进制浮点数的表示方法。
对于任意一个浮点数,那么10进制也能表示浮点数。
///////////////////////////////////////
令m = n ^ n, 左右同时取对数
log10(m) = n * log10(n), 即 m = 10 ^ (n * log10(n));
n * log10(n) 可拆分为整数部分和小数部分。
bit: 整数部分, float_point: 小数部分。
n * log10(n) = 10 ^ bit * 10 ^ float_point;
10 ^ bit首位一定是1, 那么首位的数字就由10 ^ float_point决定, 同时可以看出bit正好是 n ^ n 的位数。
首位数字即为(int)10 ^ float_point