HDOJ 1060 Leftmost Digit

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

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。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 // HDOJ 1060
// Author: Tanky Woo
 
#include <iostream>
#include <cmath>
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;
}

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

发表评论

电子邮件地址不会被公开。 必填项已用*标注