http://blog.csdn.net/alongela/article/details/6747772
来源:互联网 发布:明华堂淘宝 编辑:程序博客网 时间:2024/06/03 18:43
有奖征资源,博文分享有内涵 6月推荐文章汇总 CSDN博文大赛初赛晋级名单公布
HDU1060 数学方法实现超大数计算
分类: ACM解题报告 2011-09-04 20:34 277人阅读 评论(0)收藏 举报
(转自网上牛人解题报告)
题目大意是输入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<iostream>
- #include<cmath>
- using namespace std;
- int main()
- {
- int ncase;
- __int64 n, ans;
- long double t;
- scanf("%d", &ncase);
- while (ncase--)
- {
- scanf("%I64d", &n);
- t = n * log10(n+0.0);
- t -= (__int64)t;
- ans = pow((long double)10, t);
- printf("%I64d\n", ans);
- }
- return 0;
- }
#include<iostream>#include<cmath>using namespace std;int main(){int ncase;__int64 n, ans;long double t;scanf("%d", &ncase);while (ncase--){scanf("%I64d", &n);t = n * log10(n+0.0);t -= (__int64)t;ans = pow((long double)10, t);printf("%I64d\n", ans);}return 0;}
long double的范围好像比__int64还要大。
0 0
- http://blog.csdn.net/alongela/article/details/6747772
- http://blog.csdn.net/alongela/article/details/6747772
- http://blog.csdn.net/IBM_hoojo/article/details/5688947
- http://blog.csdn.net/chenlaic/article/details/6143235
- http://blog.csdn.net/eaglewood2005/article/details/4335052
- http://blog.csdn.net/mchp/article/details/3995970
- http://blog.csdn.net/v_july_v/article/details/6015165
- http://blog.csdn.net/masterz/article/details/6232585
- http://blog.csdn.net/perfectpdl/article/details/6442847
- http://blog.csdn.net/eroswang/article/details/1967243
- http://blog.csdn.net/zhvsby/article/details/5986645
- http://blog.csdn.net/dz45693/article/details/6183645
- http://blog.csdn.net/david_lv/article/details/5798003
- http://blog.csdn.net/zxingchao2009/article/details/6299313
- http://blog.csdn.net/zhanxinhang/article/details/6783766
- http://blog.csdn.net/ruanruoshi/article/details/935510
- http://blog.csdn.net/yming0221/article/details/6538527
- http://blog.csdn.net/yming0221/article/details/6528490
- oracle安装
- 栈帧
- 你准备好了吗?
- 编译 uImage 和测试 u-Boot
- 一篇图像滤波的文章——收藏
- http://blog.csdn.net/alongela/article/details/6747772
- 【HDU 3518】Boring counting【扩展KMP】
- 史上最全设计模式导学目录(完整版)
- 循环-08. 二分法求多项式单根(20)
- http://blog.csdn.net/alongela/article/details/6747772
- 冒泡排序法
- java文件中的serialVersionUID
- 如何修改和查看tomcat内存大小
- Binary XML file line #74: Error inflating class