/*
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的最高位即为结果(因为0<=fractpart<1,所以1<=10^fractpart<10,所以10^fractpart的整数部分就是答案)
*/
#include<iostream> #include<cmath> using namespace std; double solve(double n) { double intpart,fractpart,t; //double modf (double, double*); 将参数的整数部分通过指针回传, 返回小数部分 fractpart = modf(n*log10(n),&intpart); t = pow(10,fractpart); modf(t,&intpart); return intpart; } int main() { double n; while(cin>>n) { if(n!=0) cout<<solve(n)<<endl; } return 0; }
关于<cmath>的modf函数
#include<stdio.h> #include<math.h> int main(void) { double number=123.54; double fraction,integer; fraction=modf(number,&integer); //整数部分 printf("%lf %lf ",number,integer); //小数数部分 printf("%lf %lf",number,fraction); return 0; }
Resutlt:
123.540000
123.000000
123.540000
0.540000