T^T(2)问题 (2018.11.26)

描述:
T^T这个很像一个流泪的表情是不是!其实,它是T的T次方啦~。
当T比较大的时候T^T会非常大,现在只要你求这个数一共有多少位就可以了。
输入:
输入包括多组测试数据,每个测试数据只有一个数字T(0<T<2^{31})
输出:
请输出T^T的一共有多少位数。
样例输入:

3
5

样例输出:

2
4

分析:
这道题暴力的话是肯定不行的,除了我写的这种可以试试快速幂的方法。
这道题其实是一道高中数学题,利用对数可以迅速求解,并且时间复杂度为O(1)。
因为N^ N可以写作a* 10^ k的形式,输出强制转化为整形的a就表示的最高位,然后比如说3* 3* 3=27,就可以写作2.7* 10^ 1的形式。因为n^ n=a* 10^ k所以log10(n^ n)=log10(a)+log10(10^ k).可以知道n* log10(n)=log10(a)+k,所以k=n* log10(n)-log10(a),又因为k为整型,所以去掉log10(a),即k=n* log10(n),k+1是T^T的长度。
这个公式经过推导也可以用来求最高位:a=10^(n*log10(n)-k)。

代码如下:

#include<stdio.h>
#include<math.h>
int main()
{
    int k,i;
    double n;
    while(scanf("%lf",&n)!=EOF)
    {
        k=n*log10(n);
        printf("%d\n",(int)k+1);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43262763/article/details/84564034
T