hdu 1060 Leftmost Digit

这道题一开始看到数很大,马上就想到是大数的问题,然后做了一个__int64的一个表,发现二十多就很不准了,然后就一直以为是大数的问题。练习的时候发现会做的5道题已经做完了,在做也没意思了就开始去网上查答案,然后发现~是一道很明显的数学问题。

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1060

我们可以这么考虑,一个数用科学计数法可以记做a1*10n1, ,同样numnum= a*10n,

也就是说我们需要求的就是a整数部分,这样用数学的取对数我们可以得到

x= num*lg(num) = n+lg(a);

所以lg(a) = x-n,也就是说,a = 10(x-n)

代码如下

View Code
#include<math.h>
#include<stdio.h>
int main()
{
    double x,t;
    __int64 num;
    scanf("%lf",&t);
    while(t--)
    {
        scanf("%I64d",&num);
        x = num*log10(num*1.0);
        x -= (__int64)x;
        int a = (int) pow(10.0,x);
        printf("%d\n",a);
    }
    return 0;
}

 

posted @ 2012-07-16 16:07  某某。  阅读(131)  评论(0编辑  收藏  举报