Leftmost Digit
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 10180 Accepted Submission(s): 3867
Each test case contains a single positive integer N(1<=N<=1,000,000,000).
解題思路:
對於M^N的最左側數的基本方法就是取對數。
M^N=10*N*log10(M);
log10(M)分成兩部分:整數部分s(10^s=100……00最左側永遠是1)、小數部分t;
取小數部分t,t*N=a+b,整數部分a(10^a=100……00最左側永遠是1)、小數部分b;
取小數部分b,pow(10,b)取左側第一位。
代碼:
#include <stdio.h>
#include <math.h>
int main(int argc, const char * argv[])
{
int n,a,l;
double t;
scanf("%d",&n);
while(n--)
{
scanf("%d",&a);
t=log10(a);
l=t/1;
t-=l;
t*=a;
l=t/1;
t-=l;
t=pow(10,t);
l=t/1;
while(l>9) l/=10;
printf("%d\n",l);
}
}