《ACM程序设计》-Problem-T-最接近一个数的给定的幂次的底数

题意:

描述

给定正整数B和N,找到整数A,使得A N尽可能接近B.(结果A是B的第N个根的近似)。注意,A N可以小于,等于,或大于B.

输入:输入由B和N的一对或多对值组成。每对出现在单个行上,由单个空格分隔。指定B和N的值零的线标记输入的结束。B的值在1至1,000,000(包括)的范围内,N的值在1至9(包括1和9)的范围内。

输出:对于输入中的每对B和N,如上定义的输出A本身在一行上。

示例输入:示例输出:
4 3 
5 3 
27 3 
750 5 
1000 5 
2000 5 
3000 5 
1000000 5 
0 0







16

解题思路:

两边夹思想,求出第一个大于给定数的底数,那么他的前一个数就是小于给定的数的最接近给定数的值,然后比较大于这个数与小于这个数的计算值,输出最接近的底数。

代码如下:

#include <bits/stdc++.h>
using namespace std;
int main()
{   int n,N;
     double h,j,B;
   while(cin>>B>>N)
   {
       if(B==0&&N==0)
        break;
       for(int i=1;;i++)
       {
           h=pow(i,N);
           j=pow(i+1,N);
           if(h<B&&j>B)
           {
               n=abs(h-B)<j-B?i:i+1;
               cout<<n<<endl;
               break;
           }
           else if(h==B)
           {cout<<i<<endl;
           break;}


       }
   }
  return 0;
}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值