#include <stdio.h>
long equation(long x){
return x*x+x;
}
long BinarySearch(long arr[],long start,long end,long k){
if(start==0 && end==0){
return 0;
}
else if((end-start)<=5){
for(int i=start;i<=end;i++){
if(arr[i]<=k && arr[i+1]>k){
return i;
}
}
}
else{
long mid=(start+end)/2;
if(arr[mid]==k){
return mid;
}
else if(arr[mid]>k){
return BinarySearch(arr,start,mid-1,k);
}
else{
return BinarySearch(arr,mid+1,end,k);
}
}
}
int main() {
long a;
scanf("%ld",&a);
long roots[a];
for(long i=0;i<a;i++){
roots[i]=equation(i);
}
printf("%ld",BinarySearch(roots,0,a-1,a));
return 0;
}
Для небольших чисел (до 100000000) этот код работает, но при превышении 100000000 этот код имеет ошибку во время выполнения.Я установил все переменные как long int ... Я использовал c ++ tutor, он сказал, что у шага в длинном уравнении есть проблема.Неверная запись размера 8 ... Почему?