Root of the Problem
时间: 1ms 内存:64M
描述:
Given positive integers B and N, find an integer A such that AN is as close as possible to B. (The result A is an approximation to the Nth root of B.) Note that AN may be less than, equal to, or greater than B.
输入:
The input consists of one or more pairs of values for B and N. Each pair appears on a single line, delimited by a single space. A line specifying the value zero for both B and N marks the end of the input. The value of B will be in the range 1 to 1,000,000 (inclusive), and the value of N will be in the range 1 to 9 (inclusive).
输出:
For each pair B and N in the input, output A as defined above on a line by itself.
Example Input: Example Output: 4 3
5 3
27 3
750 5
1000 5
2000 5
3000 5
1000000 5
0 01
2
3
4
4
4
5
16
示例输入:
示例输出:
提示:
参考答案(内存最优[764]):
#include<stdio.h>
#include<math.h>
int main()
{
int A,N;
long B;
int s;
int i,m;
double t;
double m2,M;
while(scanf("%d %d",&B,&N)!=EOF)
{
if(B==0&&N==0) break;
else
{
if(N==1) A=B;
else
{
t=sqrt(1.0*B);
s=floor(t);
for(i=1;i<=(s+1);i++)
{
M=pow(1.0*i,1.0*N);
m=(int)M;
if(B-m<0)
{
m2=pow(1.0*i-1,1.0*N);
if(m-B>=B-(int)m2)
{
A=i-1;
i=s+2;
}
}
if(B-m==0)
{
A=i;
i=s+2;
}
}
}
printf("%d\n",A);
}
}
return 0;
}
参考答案(时间最优[0]):
#include<stdio.h>
#include<math.h>
int main()
{
int A,N;
long B;
int s;
int i,m;
double t;
double m2,M;
while(scanf("%d %d",&B,&N)!=EOF)
{
if(B==0&&N==0) break;
else
{
if(N==1) A=B;
else
{
t=sqrt(1.0*B);
s=floor(t);
for(i=1;i<=(s+1);i++)
{
M=pow(1.0*i,1.0*N);
m=(int)M;
if(B-m<0)
{
m2=pow(1.0*i-1,1.0*N);
if(m-B>=B-(int)m2)
{
A=i-1;
i=s+2;
}
}
if(B-m==0)
{
A=i;
i=s+2;
}
}
}
printf("%d\n",A);
}
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。