hdu1060数学题求幂最左边的数

真正的数学题,题目大意是求n^n的最左边的一位数。n最大10^7,如果用for循环100%超时了。百度一下,你就知道。方法如下:

设m=n^n,则lg(m)=n*lg(n),所以m=10^(n*lg(n))=10^(整数部分+小数部分),他只要求最左边的,我只要取int(10^(小数部分)),就可以了。。太尼玛是数学题了。。

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        long double n;
        cin>>n;
        double m=n*log10(n);//m^10=n^n
        int result=powl(10,m-(long double)((long long int)(m)));
        cout<<result<<endl;
    }
    return 0;
}

  

posted @ 2012-07-29 15:39  77695  阅读(164)  评论(0编辑  收藏  举报