版权声明:欢迎借鉴,谢绝抄搬。 https://blog.csdn.net/ssllyf/article/details/86696220
YY
题目大意:
给出一个超大正整数S,求出 =S中n的解
样例输入
387420489
样例输出
9
数据范围限制
S的位数小于500000
解题思路:
看到数据,爆搜是不可能的,我们用数字的位数来做,我们用一个公式: (S的位数,当S为100时,结果为2+1=3,若 =S,则b= ),然后将S换为p的p次方(如题意)则为 ,然后就可以代换成 (因为p的p次方的位数,等于p的位数乘上p),然后根据这个东西枚举p,再判断这个的值和S的位数是否相等即可
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
string str;
long long len;
int main()
{
cin>>str;
len=str.size();//位数
for (long long i=1;i<=len+1;++i)//枚举p,因为3^3=27,27的位数为2,由此得知要加一
if (floor(i*log10(i)+1)==len)//求出p的p次方的位数,再判断是否和S的位数相等
{
printf("%lld",i);//输出
break;//退出
}
return 0;
}