hdu 1060 Leftmost Digit(幂次方最高位)

来源:互联网 发布:java工程师有前途吗 编辑:程序博客网 时间:2024/06/05 08:32

转自网上牛人解题报告)


题目大意是输入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(){int t;__int64 s,n;long double m;scanf("%d",&t);while(t--){scanf("%I64d",&n);m=n*log10(n+0.0);m-=(__int64)m;s=(__int64)pow((long double)10,m);printf("%I64d\n",s);}return 0;}

long double的范围好像比__int64还要大。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 8个月小孩发烧39度怎么办 咳嗽吃了很多药都不见效果怎么办 生完孩子半个月奶水越来越少怎么办 买到了坏了的水果商家不赔怎么办 小孩奶不够吃又不吃奶粉怎么办 10个月的宝宝便秘很严重怎么办 四岁的宝宝突然不怎么吃饭怎么办 1岁7个月宝宝突然不爱吃饭怎么办 宝宝发烧好了之后不吃辅食怎么办 吃母乳的宝宝不喝奶粉怎么办 奶水不足宝宝又不喝奶粉怎么办 6个月宝宝断奶哭闹不用奶瓶怎么办 小孩不爱吃饭怎么办该吃些什么 二个月宝宝只认母乳不喝牛奶怎么办 满月宝宝只认奶粉不认母乳怎么办 宝宝四个月只认奶瓶不认母乳怎么办 新生儿只认奶瓶不认母乳怎么办 7个月宝宝不吃辅食怎么办 8个月小孩不吃辅食怎么办 9个月小孩不吃辅食怎么办 十一个月宝宝拉肚子拉水怎么办 小孩好动上课也坐不住会怎么办 幼儿大班关于环保的手抄报怎么办 捷达车打开丝位子风扇总转怎么办 小班个案分析:好动的孩子该怎么办 孩子突然过于的兴奋不睡觉是怎么办 刚出生的宝宝听力未通过怎么办 孩子多动症被老师打不上学怎么办 小孩在校被学生打家长该怎么办? 8岁儿童好动上课不注意听课怎么办 怀孕第一个月喝了啤酒怎么办 不知道自己怀孕喝了酒怎么办 怀孕一个月不知道喝酒了怎么办 老师说孩子上课不专心听讲怎么办 二年级孩子上课不认真听讲怎么办 二年级的孩子浮躁上课不认真怎么办 三年级的小孩上课不认真听讲怎么办 大班孩子上课不专心听讲玩怎么办 老师跟家长说小孩上课讲话怎么办 别的家长动手打自己的孩子怎么办? 一岁3个月宝宝骨龄偏小怎么办