年代太久,都有点忘记了!

#include "stdio.h"

int judge(__int64 a,int n,__int64 b)
{
    
int i;
    __int64 sum
=1;
    
for(i=0;i<n;i++)
    
{
        sum
*=a;
        
if(sum>=b)break;
    }

    
if(i>=n)return -1;
    
else return 1;
}


__int64 power(__int64 a,
int n)
{
    __int64 sum
=1;
    __int64 temp
=a;
    
while(n!=0)
    
{
        
if(n&1)sum*=temp;
        temp
*=temp;
        n
>>=1;
    }

    
return sum;
}


__int64 min(__int64 a,__int64 b,
int n,__int64 p)
{
    
return (p-power(a,n)<power(b,n)-p)?a:b;
}


int main()
{
    
int n;
    __int64 b;
    __int64 left,right,middle;
    
while(1)
    
{
        scanf(
"%I64d%d",&b,&n);
        
if(b==0&&n==0)break;
        left
=0;right=b;
        
while(left<=right)
        
{
            middle
=(left+right)/2;
            
if(judge(middle,n,b)>0)right=middle-1;
            
else left=middle+1;
        }

        printf(
"%I64d\n",min(right,left,n,b));
    }

    
return 0;
}

代码如下: