题目链接:http://codeforces.com/problemset/problem/30/A
源代码:
#include<math.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int fun(int i,int n)
{
int j;
int num=1;
for(j=0;j<n;j++)
num*=i;
return num;
}
int main()
{
int a,b,n;
int k;
int mid;
int num;
while(cin>>a>>b>>n)
{
if(b==0)
{
printf("0\n");
continue;
}
if(a==0)
{
if(b!=0)
{
printf("No solution\n");
continue;
}
}
if(b%a!=0)
{
printf("No solution\n");
continue;
}
k=b/a;
if(n==1)
{
printf("%d\n",k);
continue;
}
if(n==2)
{
if(k<0)
{
printf("No solution\n");
continue;
}
mid=sqrt(k*1.0);
if((double)(mid)==sqrt(k*1.0))
{
printf("%d\n",mid);
continue;
}
else
{
printf("No solution\n");
continue;
}
}
int flag=0;
for(int i=-10;i<=10;i++)
{
num=fun(i,n);
if(num==k)
{
flag=1;
printf("%d\n",i); // 在这里,想当然的以为num>k就该跳出了,
// 忘记了当n为偶数的时候,可能会直接跳出。
break;
}
}
if(!flag) printf("No solution\n");
}
return 0;
}