做题总结:
我们所做的题,数据范围大都涉及在long long 所能表示的范围内,而
像本题中,k^k ,在k取“可预见值时”在本题中时16或17,会超出这个范围。这时打表处理是一个不错的方法
#include<cstdio>
#include<cstring>
using namespace std;
long long ksm(long long a,long long b)
{
long long ans=1;
while(b)
{
if(b&1) ans=(ans*a);
a=(a*a);
b>>=1;
}
return ans;
}
int main()
{
long long n;
long long a[17];
for(int i=1;i<=15;i++)
{
a[i]=ksm(i,i);
}
while(scanf("%lld",&n)!=EOF)
{
long long count=0;
for(int i=1;i<=15;i++)
{
if(n>=a[i]) count++;
else break;
}
printf("%lld\n",count);
}
return 0;
}