原题地址
nn用科学计数法表示即:
nn=a * 10x ,其中1<=a<10
两边取对数: n * lg(n) = x + lg(a);
因为0<=lg(a)<1,两边取整得:
x=int(n * lg(n))
回代之后可得a=10(n*lg(n)-int(n*lg(n)))
对a取整后即可取得最高位
写代码的时候要注意,由于n*lg(n)太大,不能直接取整,可能会变成负数,可以将其值缩小之后再取整
#include<iostream>
#include<cmath>
using namespace std;
const int MAX=1000000000;
int main()
{
int loop;
cin>>loop;
while(loop--)
{
int n;
cin>>n;
double x=n*log(n)/log(10);
while(x>MAX) x-=MAX;
cout<<int(pow(10.0,x-int(x)))<<endl;
}
return 0;
}