n^n的第一位数
来源:互联网 发布:班超定西域知乎 编辑:程序博客网 时间:2024/05/17 07:24
http://www.cnblogs.com/dmesg/archive/2009/08/02/1536997.html
我想知道怎么求N的N次方,这个数据是很大的,但是我要的是这个数据的最高位的数,应该有什么好的方法吧!
请大侠们帮帮忙吧!!(N <1000000000)
这个问题提出后,fallening同学便很快的在五分钟内作出了解答
log_10(N^N)=N*log_10(N) 因此,log_10(N)的第一位就是你要求的:)
我在三楼看的很疑惑,于是向同学提出问题,一天之后他给出解答
N^N=10^(Nlog(N))=10^(log(N))*10^N= 10^(log(N))*1000...0(N个0)
你要最高位置的数字,只需要计算10^(log(N))的最高位即可:)
而到这里,大家很明显就能看出这位同学的推理错误10^(N log(N))= 10^(log(N))*10^N。。。哈哈
哈哈,如果你和我一样开始笑话起这个同学,那么我们就太可悲了。。。
看看楼下的朋友们是怎么做的吧,,
hityct1:我的想法:
根据11楼的想法,改动一下。
N^N = 10^(N*log(N))中,
由于 N <1000000000,
N*log(N)取值在[0,9000000000],没有超出double数据的范围,没有益处。
设N*log(N)的整数部分为intpart,分数部分为fractpart,
则N^N = 10^(intpart + fractpart) = 10^intpart * 10^fractpart.
其中10^intpart肯定为10的倍数,不影响结果,可忽略。
所以:
10^fractpart的最高位即为结果。
不用大数,double即可满足。
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY;
以下程序是我自己写的:modf函数是用来分开整数部分和小数部分的;虽然都是用的double类型
double integer,xiaoshubufen;用法:xiaoshubufen=modf(x,&integer);
这样就把x的整数部分和小数部分分开了;
#include<stdio.h>#include<math.h>int main(){double m,n,j,k;int i;while(scanf("%lf",&k)!=EOF){m=modf(k*1.0*log10(k*1.0),&j);m=modf(pow((double)10,m),&j);printf("%d\n",(int)j);}return 0;}
- n^n的第一位数
- N^N的第一位数
- hdu_1060_数学求解n^n的第一位数
- 求n^n第一位数 数学
- N!的位数
- 求N!的位数
- 求N!的位数
- N!的位数
- n!结果的位数
- 计算n!的位数
- 求N!的位数
- n!的位数
- N!的位数
- N!的位数
- n的阶乘的位数
- 求大数n!的位数
- PKU1423:求n!的位数。
- POJ_1423_Big Number(n!的位数)
- TCP三次握手/四次挥手详解
- GetLastError返回代码含义
- 黑马程序员_注解(Annotation)
- oracle管理的有用语句
- 我该怎么办!果断辞职,搬走......?
- n^n的第一位数
- linux学习
- Android UI 设计准则
- 《那些年啊,那些事——一个程序员的奋斗史》——71
- u-boot下nand调试
- 解决android模拟器上不了网的问题
- Gradient─CSS3渐变
- 十二.Android中Service的初步介绍
- android开发(一):搭建android开发环境