n^n的第一位数

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值