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
  1. 2
  2. 3
  3. 4
 
Sample Output
  1. 2
  2. 2
  3. Hint
  4. In the first case, 3 * 3 * 3 = 27, so the leftmost digit is 2.
  5. In the second case, 4 * 4 * 4 * 4 = 256, so the leftmost digit is 2.
  6.  
 
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 就是答案了。

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. freopen("a.in","r",stdin);
  6. freopen("a.out","w",stdout);
  7. int T;
  8. long long N;
  9. double temp;
  10. double ans;
  11. while(scanf("%d",&T)!=EOF)
  12. while(T--)
  13. {
  14. scanf("%I64d",&N);
  15. temp=N*log10((double)N);
  16. temp=temp-(long long)temp;
  17. ans=pow(10,temp)+1e-8;
  18. printf("%d\n",(int)ans);
  19. }
  20. return 0;
  21. }

注意取整可能丢精度 记得加个 1e-6 或  1e-8

【取对数+科学计数法】【HDU1060】 N^N的更多相关文章

  1. C# 中科学计数法转成正常值

    抓取数据的时候碰到科学技术法,查了一些资料,直接贴代码 /// <summary> /// 数字科学计数法处理 /// </summary> /// <param nam ...

  2. POI取消科学计数法

    前台输入手机号13777777777,如果是为Double类型接收,就会自动转为科学计数法 找了下,一般是Double转String,方法一般有两种: 1.利用String.format() sale ...

  3. R options scipen 控制科学计数法的显示

    当数字过长,R语言会自动采用科学计数法显示,测试如下 > a <- > a [] > a <- > a <- > a [] > a <- & ...

  4. PHP的两个科学计数法转换为字符串的方法

    不常用,所以整理在这里,分享给同行使用 方法一:取尾数法 public function NumToStr($num) { if (stripos($num, 'e') === false) retu ...

  5. Java 科学计数法

    目录 Java 科学计数法 1 科学计数法的概念 1.1 有效数字 1.2 E记号 2 Java中的科学计数法 2.1 NumberFormat 2.2 DecimalFormat 2.3 BigDe ...

  6. Linux下科学计数法(e)转化为数字的方法 [shell中几种数字计算说明]

    科学计数法使用e标识数值,将科学计算学转化为数字的思路:按e右边的数字移动小数点位数.e右边的数字如果是负数,则向左移动小数点.示例如下: 1.2345678e2 = 123.45678 1.2345 ...

  7. csv 中 数值被自动转换成科学计数法 的问题 excel打开后数字用科学计数法显示且低位变0的解决方法

    保存在csv中的 013812345678,前面的0会被去掉,后面是科学计数法显示.保存成 col1,="013812345678" 即可. 注意,分隔符逗号后面直接接“=”等号. ...

  8. 【转】js 中导出excel 较长数字串会变为科学计数法

    [转]js 中导出excel 较长数字串会变成科学计数法 在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串 ...

  9. C# 科学计数法转换成数字

    /// <summary> /// 判断输入的数是否是科学计数法.如果是的话,就会将其换算成整数并且返回,否则就返回false. /// </summary> /// < ...

随机推荐

  1. 批量创建prefab

    using UnityEngine; using System.Collections; using UnityEngine.UI; using System.IO; using UnityEdito ...

  2. sql语句中查询出的数据添加一列,并且添加默认值

    查询出数据,并且要添加一列表中都不存在的数据,且这一列的值都是相等的 select app_id,app_secret from wx_ticket group by app_id; 查询出的数据是 ...

  3. 纯html网页重定向与跳转

    javaScript 跳转 方法一: <script language="javascript">    window.location = "http:// ...

  4. Android 多线程断点下载(非原创)

    1.服务器的CPU分配给每条线程的时间片相同,服务器带宽平均分配给每条线程,所以客户端开启的线程越多,就能抢占到更多的服务器资源,这里在客户端开启多个线程来从服务器下载资源 2.fragment_ma ...

  5. iOS 实现毛玻璃效果

    话说苹果在iOS7.0之后,很多系统界面都使用了毛玻璃效果,增加了界面的美观性,比如下图的通知中心界面; 但是其iOS7.0的SDK并没有提供给开发者实现毛玻璃效果的API,所以很多人都是通过一些别人 ...

  6. 【JavaScript DOM 编程艺术】 笔记

    第一章:JavaScript 简史 1.1 javascript的起源 JavaScript是一种脚本语言,通常只能通过web浏览器去完成一些操作而不能像普通意义上的程序那样独立运行,需要由Web浏览 ...

  7. 如何循序渐进有效学习 JavaScript?

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:宋学彦链接:http://www.zhihu.com/question/19713563/answer/23068003来源: ...

  8. 亲试,Windows平台上使用Qt5.2.1编写Android

    首先把工具都下载好: 1. Qt for Android: http://qt-project.org/downloads 2. Android NDK http://developer.androi ...

  9. SSE2 Intrinsics各函数介绍[转]

    SIMD相关头文件包括: //#include <ivec.h>//MMX //#include <fvec.h>//SSE(also include ivec.h) //#i ...

  10. HQL(Hibernate Query language)语言

    现在有两张表:student(学生表),classroom(教室表). //对象 Student 对应 student 表中有四个字段,分别是:id,name,age,classroom; publi ...