Blog·Tanky WooABOUTRSS

HDOJ 1060 Leftmost Digit

12 Jul 2010
这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。

这个题目有点思想,不算水题,只能说找到方法后就很简单。

log10N^N = N*log10N = M = a.b(a是整数部分,0.b是小数部分)

所以10^M = 10^a.b = N^N(即N^N为a位数)

10^b向下取整即为首位数

举个例子:3^3=27, 3log3 = 1.431364, 10^0.431364 = 2.70000......

此题还是要学会观察,并熟悉对数

注:pow(a,b)中a,b是浮点型,现开始代码里的10.0写成10,虽然本地测试是对了,但是在OJ上就直接给CE了。。。。汗,想要CE是很难的。。。

N可能是1 000 000 000,所以long绝对不够,要long long。

代码:

 // HDOJ 1060
// Author: Tanky Woo

#include 
#include 
using namespace std;

int nCases;
long long N;

int main()
{
    scanf("%d", &nCases;);
    while(nCases--)
    {
        scanf("%ld", &N;);
        double m = N*log10((double)N);
        double g = m - (long long)m;
        g = pow(10.0, g);
        printf("%d\n", (int)g);
    }
    return 0;
}