11.26(T^T)

T^T(2)

Description

T^T这个很像一个流泪的表情是不是!其实,它是T的T次方啦~。
当T比较大的时候T^T会非常大,现在只要你求这个数一共有多少位就可以了。

Input

输入包括多组测试数据,每个测试数据只有一个数字T(0<T<2^{31})T(0<T<2(31))。

Output

请输出T^T的一共有多少位数。

Sample Input 1

3
5

Sample Output 1

2
4


解题思路

思路一:

硬算。
直接算n的n次方,然后转换成字符串,然后数数
当然了,这个方法肯定费事

思路二:

因为做题做了一个快速幂的。愚蠢的我就想试试
代码如下:

#include<stdio.h>
#include<math.h>
long long int f(int a,int b)
{
    int r=1;
    while(b!=0)
    {
        if(b%2==1)
        {
            r*=a;
        }
        a*=a;
        b>>=1;
    }
    return r;
}
int main()
{
    int n;
    long long int f(int a,int b);
    while(scanf("%d",&n)!=EOF)
    {
        printf("%.0f\n",floor(log10(f(n,n)))+1);
    }
    return 0;
}

结果不用猜啊!超时!
所以,我一上午的时间就这样浪费了
继续观察。你看这log函数,是不是有·东西???
log(a^b)=b*log(a)
记住他!非常有用!
ok

思路三:

这样。又有问题了。这个多余的log是干啥的呢
求位数。log10=1;log100=2
那么要求数n的位数就可以是
n*log(n)+1
代码如下:

#include<stdio.h>
#include<math.h>
int main()
{
    long long int n,m;
    while(scanf("%lld",&n)!=EOF)
    {
        m=floor(n*log10(n))+1;
        printf("%lld\n",m);
    }
    return 0;
}

哭哭,方法二这么多行真的很折磨人。

猜你喜欢

转载自blog.csdn.net/qq_42906486/article/details/84555309
T