算法入门-数学题之大数问题HDOJ1060&& HDOJ1061
来源:互联网 发布:base64 加密 java key 编辑:程序博客网 时间:2024/06/04 01:26
1060:
题目大意:一组数据包含N个整数,整数范围为(1=<N<=1,000,000,000),但是题目要求是:求出N^N的最左边数位的数字:例如
2^2 是 4 answer=4 3^3 是 27 answer = 2 4^4 是256 answer = 2;
解题思路:由N的范围可知用 32位的int 就足够存储。但是计算N^N就不能直接求解了,必须借助 去对数方法 log 。
由对数性质:logN + logN = log(N*N) = 2logN; 那么logN + logN…… logN (N个) = log(N*N*N……*N) = N*logN;
设 double x = N*logN (x表示 10^x 即为 N^N 但是损失后面位数精度的情况下表示N^N)
设 double a = x - (int)x (减去x整数位留下小数位的含义就是,将N^N按照10进制向右移(int)x 位。剩下的整数位即位所求答案,然后通过取整获得答案。
那么:answer = (int)pow(10.0, a)
至此总结完毕。
代码如下:
//Time:15MS//Mem :352K#include <iostream>#include <cmath>using namespace std;int main(){int t;cin>>t;for(int i=0;i<t;i++){int n;cin>>n;double len = n*(log10(n*1.0));double ans = len - (long long int)len;cout<<(int)pow(10.0,ans)<<endl;}return 0;}
1061
题目大意:类似1060,但是这次是让求最右数位的值。
解题思路:由于只求个位的数字,而个位数字只跟个位有关,通过列表发现是一个周期为4的规律。
代码如下:
//注意考虑0的情况//Time:15MS//Mem :344K#include <iostream>using namespace std;int main(){ int num; cin>>num; for(int i=0;i<num;i++) { int s; cin>>s; int t = s%10; if(s==0) cout<<1<<endl; else if(t==0) cout<<0<<endl; else if(t==1) cout<<1<<endl; else if(s%4==1) cout<<t<<endl; else if(s%4==2) cout<<(t*t)%10<<endl; else if(s%4==3) cout<<(t*t*t)%10<<endl;else if(s%4 == 0) cout<<(t*t*t*t)%10<<endl; } return 0;}
- 算法入门-数学题之大数问题HDOJ1060&& HDOJ1061
- 算法入门数学题hdoj 1004
- hdoj1060
- HDOJ1060
- hdoj1060
- 整数问题(入门数学题)
- 算法理解之大数相乘问题
- 大数算法之大数加减法
- WV.27-大数阶乘算法7-入门篇之二
- 算法--大数相加问题
- [算法系列之八]大数问题(高精度运算)
- 大数问题之加减乘除
- 大数问题之大菲波数
- 【数学题】概率问题之-学生的生日
- 算法基础:大数求和问题
- 算法题-大数相乘问题
- 算法题-大数相乘问题
- RSA Factorization----POJ3892----数学题+大数
- Ios demo
- Windows2003下安装SVN服务端
- 面向对象设计6条原则
- ==与equals的区别
- C语言中函数的使用小记——掌握函数参数的传递方式
- 算法入门-数学题之大数问题HDOJ1060&& HDOJ1061
- python——作用域
- 压缩代码
- OC 数据储存
- 指针与const
- Perl正则表达式
- Java如何获取文件编码格式
- Domino9中人性化的小设计:将"_"认定为分隔符
- 如何调试 Domino/Notes Java代理