因为数值范围太小甚至都觉得用快速幂是不是大材小用了……
注意幂运算的速度,以及正负符号的判断,特判成立时记得return免得多重输出,基本上算法难度没有,作为一道骗WA的水题还是不错的= =。
#include <cmath>
#include <vector>
#include <cctype>
#include <cstdio>
#include <string>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int Pow(int a,int k){
int sum=1;
while(k){
if(k&1)sum=sum*a;
a=a*a;
k>>=1; //k=k>>1;
}
return sum;
}
int main()
{
int a,b,n;
scanf("%d%d%d",&a,&b,&n);
if(a==0&&b!=0)
{
puts("No solution");
return 0;
}
else if(b==0)
{
printf(a==0?"1":"0");
return 0;
}
else
{
int Mi=b/a;
if(abs(Mi)==1)
{
if(Mi==1)printf("1");
else printf(n%2==0?"No solution":"-1");
return 0;
}
else for(int i=1;Pow(i,n)<=abs(Mi);i++)
{
if(Pow(i,n)==Mi)
{
printf("%d",i);
return 0;
}
else if(Pow(0-i,n)==Mi)
{
printf("-%d",i);
return 0;
}
}
printf("No solution");
}
return 0;
}