Я пишу код для вычисления kth root с использованием бинарного поиска.
#include <iostream>
#include<math.h>
using namespace std;
bool isPossible(long n,int k,long mid)
{
long ans=pow(mid,k);
if(ans<=n)
{
return true;
}
return false;
}
int main() {
int t,k;
long n;
cin>>t;
for(int i=0;i<t;i++)
{
cin>>n>>k;
int s=1;
long e=n;
long answer=n;
while(s<=e)
{
long mid=(s+e)/2;
if(isPossible(n,k,mid))
{
answer=min(answer,mid);
s=mid+1;
}
else
{
e=mid-1;
}
}
cout<<answer<<endl;
}
}
Этот код приводит к Отказано в разрешении collect2.exe: ошибка: ld вернул 1 состояние выхода Если я изменю тип данных функции ans в isPossible () , чтобы удвоить успешное выполнение программы, или если я изменю оператор проверки на
if(pow(mid,k)<=n)
{
return true;
}
I haven ' я не видел такого рода ошибки из-за несоответствия типов данных, я не понимаю, почему это происходит здесь, потому что обычное хранение возвращаемого значения pow () в int не вызывает ошибки такого типа.