- 浏览: 37598 次
文章分类
- 全部博客 (41)
- 卧鸟个去 (2)
- Transform (2)
- Mathmatic (9)
- Plant-Tree (7)
- Data-Struct (12)
- Red-Black-Tree (1)
- Radix-Tree (1)
- Trie (2)
- String (4)
- BST (2)
- Amazing-Union-Find-Set (1)
- HDU (27)
- OJ (32)
- BFS (3)
- Pretty-Suffix-Array (2)
- POJ (6)
- Graceful-Segment-Tree (2)
- Geometry (6)
- Priority-Queue (2)
- Dynamic-Programing (1)
- DP (3)
- LCS (1)
- Convex-Hull (2)
- Triangulation (1)
- DFS (3)
- Combinatorial-Mathematics (2)
- Big-Number (1)
- Statistic (3)
- STL (1)
- Shortest-Path (3)
- ZOJ (1)
- Leftist-Tree (1)
- Prime (1)
- Binary-Index-Tree (1)
- (1)
- Stack (1)
- SPFA (0)
- CRT (1)
Leftmost Digit
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5483 Accepted Submission(s): 2080
Problem Description
Given a positive integer N, you should output the leftmost digit of N^N.
Input
The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
Output
For each test case, you should output the leftmost digit of N^N.
Sample Input
2 3 4
Sample Output
2 2HintIn the first case, 3 * 3 * 3 = 27, so the leftmost digit is 2. In the second case, 4 * 4 * 4 * 4 = 256, so the leftmost digit is 2.
Author
Ignatius.L
第一次睇到呢个题目,以为系高精度求幂,然后取第一位…………摆左好耐都无做过,琴日见到华神http://972169909-qq-com.iteye.com/提到
可以利用科学计数法黎做。
众所周知,科学计数法其实就系一个数n = delta * 10^k
题目可以转化为:n^n = delta * 10^k
注意到delta个位数部分其实就系最左面既数字,所以我地只要得到delta就咩都搞掂晒啦。
所以集合科学计数法后面为10的幂次呢个特点,我地作如下神变:
n^n = delta * 10^k
log(n^n) = log(delta * 10^k)
n * log(n) = log(delta) + k
n * log(n) = log(delta) + k
k = floor(n * log(n))
log(delta) = n * log(n) - k = n * log(n) - floor(n * log(n));
log(delta) = n * log(n) - k = n * log(n) - floor(n * log(n));
delta = 10^(n * log(n) - floor(n * log(n)))
求出delta之后,直接int或者floor取整就ok,log(n^n)之所以化成n*log(n)系因为精度问题,n^n会点大家心照啦{= =+}。
k为10既整数幂次,所以显然k = floor(n * log(n)),呢度一定要用floor而唔系int强制转换因为会出错,至于点解会出错,
原因好简单,就系强制double转换int时候既精度缺失{= =},依个系由浮点数储存机制造成,原理可以参考百*百科或者
伪基百科,呢度懒得9up{= =+}。
下面献上代码:
4222331 | 2011-07-20 10:22:04 | Accepted | 1060 | 0MS | 272K | 493 B | C++ | 10SGetEternal{(。)(。)}! |
#include <cmath> #include <iostream> using namespace std; int main() { int T; double n; scanf("%d", &T); while (T--) { scanf("%lf", &n); #if 0 printf("test = %lf\n", n * log10(n) - floor(n * log10(n))); #endif //n = n / pow(10, log10(n)); printf("%d\n", (int)pow(10.0, n * log10(n) - floor(n * log10(n)))); } return 0; } /* n^n = delta * 10^k log(n^n) = n * log(n) = log(delta) + k log(delta) = n * log(n) - k = n * log(n) - floor(n * log(n)); */
多谢收睇{= =*}
发表评论
-
HDU 1370 Biorhythms
2011-08-03 10:27 1193Biorhythms Time Limit: 2000/10 ... -
HDU 1075 What Are You Talking About
2011-08-04 11:00 866What Are You Talking About Tim ... -
HDU 1058 Humble Numbers
2011-08-02 15:55 1225Humble Numbers Time Limit: 200 ... -
HDU 2095 find your present (2)
2011-08-02 16:13 818find your present (2) Time Lim ... -
HDU 1022 Train Problem I
2011-08-02 21:00 1015Train Problem I Time Limit: 20 ... -
2142 HDU box
2011-08-02 21:21 764box Time Limit: 3000/1000 MS ( ... -
HDU 2151 Worm
2011-08-01 20:48 849Worm Time Limit: 1000/1000 MS ... -
HDU 2722 Here We Go(relians) Again
2011-08-02 00:06 1027Here We Go(relians) Again Time ... -
HDU 3791 二叉搜索树
2011-08-02 14:26 1208二叉搜索树 Time Limit: 20 ... -
PKU 2352 Stars
2011-07-31 21:47 1028Stars Time Limit: 1000MS ... -
PKU 2774 Long Long Message
2011-07-31 21:26 904Long Long Message Time Li ... -
PKU 2777 Count Color
2011-07-31 21:31 797Count Color Time Limit: 1 ... -
HDU 2098 分拆素数和
2011-07-31 21:08 1063分拆素数和 Time Limit: 1000/1000 MS ... -
ZOJ 3512 Financial Fraud .
2011-07-31 20:49 1285Financial Fraud Time Limit: 3 ... -
HDU 1798 Tell me the area .
2011-07-31 20:47 1124Tell me the area Time Limit: 3 ... -
HDU 2962 Trucking .
2011-07-31 20:46 685Trucking Time Limit: 20000/100 ... -
HDU 1596 find the safest road .
2011-07-31 20:45 605find the safest road Time Limi ... -
HDU 2553 N皇后问题 .
2011-07-31 20:20 704N皇后问题 Time Limit: 2000/1000 MS ... -
HDU 1392 Surround the Trees .
2011-07-31 20:19 797Surround the Trees Time Limit: ... -
HDU 1234 开门人和关门人 .
2011-07-31 20:17 676开门人和关门人 Time Limit: 2000/1000 ...
相关推荐
杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU操作系统实验.zip杭电操作系统实验 HDU...
HDU操作系统实验.zip大学期间操作系统实验-HDU操作系统实验.zip大学期间操作系统实验-HDU操作系统实验.zip大学期间操作系统实验-HDU操作系统实验.zip大学期间操作系统实验-HDU操作系统实验.zip大学期间操作系统实验-...
这个压缩文件包含的是作者个人提交并解决的ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)题目,这些题目来源于HDU的在线编程平台。 【描述】"杭电的一些acm题目,都是我自己一个一...
HDU-ACM课件.rar 是一个专门为编程竞赛爱好者准备的资源包,主要涵盖了ACM(国际大学生程序设计竞赛)中常见的算法知识。这个压缩包包含了一系列与算法相关的主题,旨在帮助初学者理解和掌握基础及进阶算法。下面将...
标题中的“算法-数塔(HDU-2084)”是指一个编程竞赛题目,源自杭州电子科技大学(HDU)的在线编程平台。在这个问题中,参赛者被要求解决一个名为“数塔”的算法挑战。数塔问题通常涉及到递归、深度优先搜索(DFS)...
标题中的"HDU-1535-.zip_多源点"表明这是一个关于解决 ACM (国际大学生程序设计竞赛)问题的程序代码包,问题编号为 HDU 1535,且该问题涉及到多源点的最短路径计算。描述中提到的"求多源点到单终点的最短路(反向...
标题中的“算术(HDU-6715)”很可能是指一个编程竞赛或在线教育平台上的一个问题或挑战,通常这类题目会涉及到算法和数学的应用。由于没有具体的标签信息,我们将根据题目标题和可能的内容来推测相关的IT知识点。 ...
《算法-确定比赛名次(HDU-1285)》 算法是计算机科学的基础,也是解决复杂问题的关键工具。在这个问题中,我们聚焦于一个具体的算法挑战——确定比赛名次,这个问题来源于HDU(杭州电子科技大学)的在线编程竞赛...
《最短路问题详解》 在计算机科学领域,最短路问题是一个经典的图论问题,其目标是寻找网络中两点间路径的最小成本。这个问题在众多应用中都有所体现,如交通规划、通信网络设计、社交网络分析等。...
数字图像处理是计算机科学和信息技术领域中的一种重要技术,涉及到图像处理、图像分析和图像识别等方面。下面是根据给定的文件信息生成的相关知识点: 1. 数字图像的定义和分类:数字图像是指使用数字信号表示的...
高级计算机图形学重点笔记 本资源摘要信息主要介绍了高级计算机图形学的重点知识点,涵盖了坐标变换、视图变换、投影变换、设备变换、视窗变换、消隐方法、光照明计算、光线跟踪、shading 方法等方面。...