hdu 1060 Leftmost digit(思維)
阿新 • • 發佈:2018-11-11
題意,輸入一個n,求n^n的最高位是多少
當時比賽的時候,有嘗試思考過,直接乘肯定不行,大數乘法想想也會超時,就感覺可能需要一種數學的方法。但是沒有想到這個數學的方法。
賽後查到了這個數學方法,簡單的描述一下。對任意一個數,如果以10為底,取他的對數,得出來的數的整數部分就是他的位數,小數部分作為10的冪,得出來的數就是最高位的數字。
於是這個數學方法就是對m^m取對數mlg(m),取這個數的小數部分,再pow一下,就可以了。
程式碼很簡單,但是需要注意到的是這道題的精度問題很重要,我WA了兩次,估計都是精度問題。後來改了幾個位置的資料型別,不知道為什麼就過了。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int m;
double num;
int left;
int zs;
cin>>m;
num=m*log10(double(m));
left=pow(10.0,num-floor(num));
cout<<left<<endl;
}
}