这篇博客是从旧博客 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;
}