Решаю какие-то задачи из школьных олимпиад и застрял на одном вопросе. Я нашел решение задачи, но мое решение требует извлечения квадратного корня. Мой код отлично работает для первых 12 входов, но затем дает неправильные ответы. Я предполагаю, что это связано с чрезвычайно большими входными данными, которые могут достигать 10 ^ 400000. Поэтому я хотел бы знать, есть ли способы вычислить целые части квадратных корней этих чрезвычайно больших входных данных в C. Вот код:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
long long n;
scanf("%lld", &n);
long long ans;
ans = sqrtl(n-1);
long long result;
result = ans+1-llabs(n-ans*ans-(ans+1));
printf("%lld\n", result);
return 0;
}
long long
, и вам понадобится какая-нибудь библиотека bignum. - person tadman   schedule 09.01.2018sqrt
функции, а в том, чтобы использовать собственный алгоритм. - person Eugene Sh.   schedule 09.01.2018sqrt(10**400000) = 10**200000
. - person Jean-François Fabre   schedule 09.01.2018542101086242752217003726400434970855712890625000[...399930 zeroes redacted...]000
раз больше, чем максимальное значение, подходящее дляuint64_t
. - person Antti Haapala   schedule 09.01.201810^40
? Большие значения не могут быть представлены в нативных типах, дажеlong double
. Вам придется использовать стороннюю библиотеку bignum или научиться реализовывать свою собственную. - person John Bode   schedule 09.01.2018mpz_sqrt(result, input);
. - person melpomene   schedule 09.01.2018abs(int)
вместо правильногоllabs(long long int j)
? В этом проблема? - person chux - Reinstate Monica   schedule 10.01.2018