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;
}
哭哭,方法二这么多行真的很折磨人。