微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

求一个大数最左边上的数

1.18题目:给出一个正整数N,请输出N^N最左边的数。

                                                        (1= <N<=1000000000);

题目分析:

       暴力解决是不可行的,无论从时间上还是从占用内存上来看都是A不了的,所以要用点技巧,令N^N=d.xxxx*10^(k-1),其中k代表数的位数,那么d.xxxx=10^(lgN^N-(k-1)),再对d.xxxx取整就是最终结果。因为k等于lgN^N的整数部分加1,所以k=lg(N^N+1)取整,至此,就获得了d的计算公式d=10^(lgN^N-lg10N^N)取整,代码如下:

    

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;

int main()
{   int t,N;
    double x=0;
    cin>>t;
    while(t--)
    {   cin>>N;
        x=N*log10((double)N);
        x=x-(int)x;
        x=(int)pow(10,x);
        cout<<x<<endl;
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐