HDU 1060 Leftmost Digit
2016-01-13 21:21
309 查看
【链接】:click here~~
【题意】:求n^n得到的数的最左边的数
【思路】
开始看到此题首先想到的是位运算,记得有一个向右取第k 位数的技巧: num >> (num_length-1) & 1,则还需要知道数的位数,可以转换成字符串来处理
另外一种巧妙的方法:
需要用到科学记数法和对数运算的知识:把num^num的值记作:num^num=a*10^n,比如三位数abc= a.bc*10^2,那么(1<a<10);
然后通过两边取对数的方法得到num*log10(1.0*num)=log10(a)+n,这时0<log10(a)<1;令x=n+log10(a),得到log10(a)=x-n;所以a=10^(x-n);n为整数部分,log10(a)为小数部分,由x=n+log10(a),可知(int)x=n;最终a=10^(x-n)=10^(x-(int)x)
代码:
【题意】:求n^n得到的数的最左边的数
【思路】
开始看到此题首先想到的是位运算,记得有一个向右取第k 位数的技巧: num >> (num_length-1) & 1,则还需要知道数的位数,可以转换成字符串来处理
另外一种巧妙的方法:
需要用到科学记数法和对数运算的知识:把num^num的值记作:num^num=a*10^n,比如三位数abc= a.bc*10^2,那么(1<a<10);
然后通过两边取对数的方法得到num*log10(1.0*num)=log10(a)+n,这时0<log10(a)<1;令x=n+log10(a),得到log10(a)=x-n;所以a=10^(x-n);n为整数部分,log10(a)为小数部分,由x=n+log10(a),可知(int)x=n;最终a=10^(x-n)=10^(x-(int)x)
代码:
<span style="font-family:SimSun;font-size:14px;">#include <queue> #include <deque> #include <vector> #include <stack> #include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <algorithm> using namespace std; int main() { // freopen("1.txt","r",stdin); int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); double m; if(n==1){puts("1");continue;} m=n*log10((double)n); m-=(long long)m; printf("%d\n",(int)pow(10,m)); } return 0; }</span>
相关文章推荐
- jquery判断节点是否存在
- iOS 网络请求数据两种请求方式GET,POST
- TCP和UDP都是端到端的协议吗
- Java常见关键字
- JQuery与HTML元素的获取、设置、添加、删除
- Linux常用命令
- python动态生成写文件变量
- linux fedora c sqlite3
- 【Nagios】nagios服务器添加监控远程Linux主机
- JavaScript:理解stringify
- JAVA 序列化 和 反序列化 (Externalizable Serializable) 那些事
- redis配置认证密码
- C++ STL 中erase()的使用需要小心
- POJ 3281 Dining (dinic+拆点)
- JavaScript:理解parse
- wince 能用的 Newtonsoft.Json(Json.Net)
- 不看星座和属相,从你喜欢的编程语言看你是什么人
- C++入门学习笔记(四)--继承与多态
- 通过Net::Ping 理解Perl的面向对象
- 浅谈Android控件中的ListView优化