【发布时间】:2018-01-09 20:37:38
【问题描述】:
我正在解决学校奥林匹克竞赛的一些任务,但我被困在一个问题上。我找到了任务的解决方案,但我的解决方案需要平方根。我的代码适用于前 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;
}
【问题讨论】:
-
这样一个挑战的想法不是使用内置的
sqrt函数,而是使用你自己的算法。 -
如果不允许使用第三方库,您将不得不研究平方根算法并实施自己的解决方案。另请参阅this approach。
-
@tadman:安全总比抱歉好。也就是说,
sqrt(10**400000) = 10**200000. -
有10^400000那么大?!你确定你不是指
10^40?较大的值无法以本机类型表示,甚至long double也不行。您将不得不使用第三方 bignum 库,或者学习如何实现自己的库。 -
数字是否用 10^n 表示法?如果是这样,这可能很容易。