首页 > 代码库 > hdoj 1060
hdoj 1060
代码:
#include <stdio.h>
#include <math.h>
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
__int64 n;
scanf("%I64d",&n);
double x=n*log10(n*1.0);
x-=(__int64)x;
__int64 a=pow(10.0, x);
printf("%I64d\n",a);
}
}
return 0;
}
要点:这道题的输入数据最大为1000000000,而且是求n^n,所以任何数据都不能用来存放n^n的结果,
考虑到用科学技术法表示一个数,可有以下推导:
x=n^n=a*10^m;// 要求x的最大位数,即求a的第一位数字;
lg(x)=n*lg(n)=m+lg(a);// 取对数,0<a<10,0<lg(a)<1,对n*lg(n)取整可得到m;
lg(a)=lg(x)-m;
a=pow(10,n*1g(n)-m);
最后取a整数部分即可。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。