【取对数+科学计数法】【HDU1060】 N^N
Leftmost Digit |
| Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) |
| Total Submission(s): 2519 Accepted Submission(s): 1101 |
|
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). |
|
Output
For each test case, you should output the leftmost digit of N^N.
|
|
Sample Input
2 |
|
Sample Output
2 |
|
Author
Ignatius.L
|
说实话。。真让我想到当初的高考压轴题 看见高次幂 去QU对数。。。
转自网上牛人解题报告)
题目大意是输入N,求N^N的最高位数字。1<=N<=1,000,000,000
估计大家看到N的范围就没想法了。
确实N的数字太大,如果想算出结果,即使不溢出也会超时。
题目是这样转化的。
首先用科学计数法来表示 N^N = a*10^x;
比如N = 3; 3^3 = 2.7 * 10^1;
我们要求的最右边的数字就是(int)a,即a的整数部分;
OK, 然后两边同时取以10为底的对数 lg(N^N) = lg(a*10^x) ;
化简 N*lg(N) = lg(a) + x;
继续化 N*lg(N) - x = lg(a)
a = 10^(N*lg(N) - x);
现在就只有x是未知的了,如果能用n来表示x的话,这题就解出来了。
又因为,x是N^N的位数。比如 N^N = 1200 ==> x = 3;
实际上就是 x 就是lg(N^N) 向下取整数,表示为[lg(N^N)]
a = 10^(N*lg(N) - [lg(N^N)]);
然后(int)a 就是答案了。
#include<stdio.h>
#include<math.h>
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
int T;
long long N;
double temp;
double ans;
while(scanf("%d",&T)!=EOF)
while(T--)
{
scanf("%I64d",&N);
temp=N*log10((double)N);
temp=temp-(long long)temp;
ans=pow(10,temp)+1e-8;
printf("%d\n",(int)ans);
}
return 0;
}
注意取整可能丢精度 记得加个 1e-6 或 1e-8
【取对数+科学计数法】【HDU1060】 N^N的更多相关文章
- C# 中科学计数法转成正常值
抓取数据的时候碰到科学技术法,查了一些资料,直接贴代码 /// <summary> /// 数字科学计数法处理 /// </summary> /// <param nam ...
- POI取消科学计数法
前台输入手机号13777777777,如果是为Double类型接收,就会自动转为科学计数法 找了下,一般是Double转String,方法一般有两种: 1.利用String.format() sale ...
- R options scipen 控制科学计数法的显示
当数字过长,R语言会自动采用科学计数法显示,测试如下 > a <- > a [] > a <- > a <- > a [] > a <- & ...
- PHP的两个科学计数法转换为字符串的方法
不常用,所以整理在这里,分享给同行使用 方法一:取尾数法 public function NumToStr($num) { if (stripos($num, 'e') === false) retu ...
- Java 科学计数法
目录 Java 科学计数法 1 科学计数法的概念 1.1 有效数字 1.2 E记号 2 Java中的科学计数法 2.1 NumberFormat 2.2 DecimalFormat 2.3 BigDe ...
- Linux下科学计数法(e)转化为数字的方法 [shell中几种数字计算说明]
科学计数法使用e标识数值,将科学计算学转化为数字的思路:按e右边的数字移动小数点位数.e右边的数字如果是负数,则向左移动小数点.示例如下: 1.2345678e2 = 123.45678 1.2345 ...
- csv 中 数值被自动转换成科学计数法 的问题 excel打开后数字用科学计数法显示且低位变0的解决方法
保存在csv中的 013812345678,前面的0会被去掉,后面是科学计数法显示.保存成 col1,="013812345678" 即可. 注意,分隔符逗号后面直接接“=”等号. ...
- 【转】js 中导出excel 较长数字串会变为科学计数法
[转]js 中导出excel 较长数字串会变成科学计数法 在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串 ...
- C# 科学计数法转换成数字
/// <summary> /// 判断输入的数是否是科学计数法.如果是的话,就会将其换算成整数并且返回,否则就返回false. /// </summary> /// < ...
随机推荐
- [ReactJS] DOM Event Listeners in a React Component
React doesn't provide the listener to listen the DOM event. But we can do it in React life cycle: So ...
- 参数化SQL小认识
在做机房收费系统项目,编写数据连接并访问数据库时,见别人都用了带“@”字符的SQL语句,就很好奇为什么都用这个语句呢?直接拼写SQL语句不是更加方便吗?带着这个问题上网查资料,才知道原来他们用的是参数 ...
- phpStudy + JspStudy 2014.10.02 下载
phpStudy + JspStudy 2014.10.02 下载 目标:让天下没有难配的php环境. phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Teng ...
- java获取文件大小
1.使用File的length()方法获取.这个方法获取的字节数,由于返回的是Long类型所以能返回的最大值是Long.MAX_VALUE File file = new File( "D: ...
- samba服务器加入域控主机所需要修改的配置文件
samba服务器加入域控主机,成为域成员,当用户访问samba服务器上的共享文件时,直接到域控主机上进行认证.samba服务器上不需要像先前一样创建系统用户,创建samba用户及密码. 1.安装环境( ...
- Oracle更改字符集
更改oracle的字符集: sqlplus / as sysdba SQL> shutdown immediate; Database closed. Database dismounted. ...
- 在Lambda表达式中使用循环变量
在C#5.0之前,如果在foreach循环中的lambda表达式里使用循环变量,那么你会发现一些意想不到的现象,例子如下: , , , }; var actions = new List<Act ...
- K - Ignatius and the Princess IV
Description "OK, you are not too bad, em... But you can never pass the next test." ...
- poj2774 Long Long Message(后缀数组or后缀自动机)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Long Long Message Time Limit: 4000MS Me ...
- UVALive3516Exploring Pyramids(dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 题目意思:有一棵多叉树,每个结点的子节点有左右之分(即要按照顺序查找),从跟结点开 ...