您的位置:首页 > 其它

HDU 1060 Leftmost Digit

2014-05-18 14:44 393 查看
Leftmost Digit

这题来回看过好多遍了,数据太大,完全没思路,老放在那看着又不爽,今天决定搜答案A之HDU <wbr>1060 <wbr>Leftmost <wbr>Digit

用的是对数lg,的确挺巧的HDU <wbr>1060 <wbr>Leftmost <wbr>Digit

直接贴了

后来,看到了一个人的分析,是这样转换的

m=n^n;两边同取对数,得到,log10(m)=n*log10(n);再得到,m=10^(n*log10(n));

然后,对于10的整数次幂,第一位是1,所以,第一位数取决于n*log10(n)的小数部分

总之,log很强大啊,在求一个数的位数上,在将大整数化成范围内的整数上,在指数问题上

#include<stdio.h>
#include<math.h>
int main()
{
__int64 cas,b,i,d;
double a,m,n,c;
scanf("%I64d",&cas);
for(i=1;i<=cas;i++)
{
scanf("%lf",&n);
a=n*log10(n);
b=(__int64)(a);
c=a-b;
d=(__int64)(pow(10,c));
printf("%I64d\n",d);
}
return 0;
}


/*
* hdu 1060--Leftmost Digit
* date 2014/5/18
* state
*/
#include <iostream>
#include <cmath>
#include <cstdio>

using namespace std;

int main()
{
    //cout << "Hello world!" << endl;
    /*
    int T;
    cin>>T;
    for(int i=0;i<T;i++)
    {
        double N;
        cin>>N;
        double Result;
        double Ans;
        Result=N*log10(N);
        Result-=(int)Result;
        Ans=pow(10.0,Result);
        Ans=(int)Ans;
        cout<<Ans<<endl;
    }
    */
    __int64 cas,b,i,d;//Int64是有符号 64 位整数数据类型,相当于C++中的long long
    double a,m,n,c;
    scanf("%I64d",&cas);
    for(i=1;i<=cas;i++)
    {
        scanf("%lf",&n);
        a=n*log10(n);
        b=(__int64)(a);
        c=a-b;
        d=(__int64)(pow(10,c));
        printf("%I64d\n",d);
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: