T^T(2)

T^T(2)(2018.11.26)

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

Input

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

Output

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

Sample Input 1

3
5
Sample Output 1

2
4
思路
昨天晚上第一眼看到这个题的时候我是没有什么思路的,唯一想到的就是用快速幂暴力解决,但在后来敲完代码测试的时候,对于较小的数没有什么问题,但在数据逐渐变大了之后,快速幂已经有些力不从心了。后来,一位群里大佬的一句话突然让我看到了一丝希望:这是一道高一数学题,可以试试取对数的方法。于是,我的第二个思路就来了,也就是成功AC的思路,下面先看代码

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

分析
这个题让求TT的位数,我们高中学过,x=log10(T**T),那么x还可以等于T*log10T(不清楚对数怎么写,这能这样了),因此,我们只要求出log10^T再乘以T就可以了。
经验教训
在写这段代码的时候由于c语言的语法不熟练出现了很多错误:开始由于没有long long int 的概念,直接用了int ,在遇到2
31这样的大数时就不行了,改正之后,又因为不知道log函数的返回值是double类型再次WA,改正之后,在本地测试又错了(多次检查后冒着WA的风险提交后却是AC),就当是熟悉语法了吧。
看到一位大佬的博客里有一些关于log的基础公式,一起分享一下吧,感谢
(https://blog.csdn.net/weixin_43250284/article/details/84554825)
第一次写博客,有些写的不好的地方和啰嗦的地方希望路过的大佬们提出来,感谢。

猜你喜欢

转载自blog.csdn.net/weixin_43105110/article/details/84555644
T2