要求位数不小于10的20次方。
sorry,打错了,是说n次方根,而且运算数小于等于10的200次方!
如何编程实现计算平方根(pascal)
答案:5 悬赏:70 手机版
解决时间 2021-02-27 16:47
- 提问者网友:書生途
- 2021-02-27 07:49
最佳答案
- 五星知识达人网友:舍身薄凉客
- 2021-02-27 08:02
二分法+高精度
你首先要写个高精度加法的函数add(a,b)=a+b,高精度乘法的函数multiply(a,b)=a*b和高精度除以2的除法的函数divide2(a)=a/2
然后,求a的n次方根的函数extract(1,10^100,a,n)如下:
function extract(l,r,a:numtype;n:longint):numtype;
var
i:longint;
m,p:numtype;
begin
m:=divide2(add(l,r));
p:=1;
for i:=1 to n do p:=multiply(p,m);
if p<a then extract:=extract(m,r,a,n);
if p=a then extract:=m;
if p>a then extract:=extract(l,m,a,n);
end;
另外还得注意下高精度数的比较大小问题和精确度问题
你首先要写个高精度加法的函数add(a,b)=a+b,高精度乘法的函数multiply(a,b)=a*b和高精度除以2的除法的函数divide2(a)=a/2
然后,求a的n次方根的函数extract(1,10^100,a,n)如下:
function extract(l,r,a:numtype;n:longint):numtype;
var
i:longint;
m,p:numtype;
begin
m:=divide2(add(l,r));
p:=1;
for i:=1 to n do p:=multiply(p,m);
if p<a then extract:=extract(m,r,a,n);
if p=a then extract:=m;
if p>a then extract:=extract(l,m,a,n);
end;
另外还得注意下高精度数的比较大小问题和精确度问题
全部回答
- 1楼网友:往事隔山水
- 2021-02-27 12:40
sqrt函数
- 2楼网友:不如潦草
- 2021-02-27 11:05
赞同二分法
再看看别人怎么说的。
- 3楼网友:酒安江南
- 2021-02-27 09:25
var i,j,k,n:longint;
begin
readln(n,k);
for i:=1 to sqrt(n) do if i的n次方=k then writeln(i);
end.
- 4楼网友:低音帝王
- 2021-02-27 09:02
模拟?
例如对10开方:
1*1=1<10
2*2=4<10
3*3=9<10
4*4=16>10
3.1*3.1=9.61<10
3.2*3.2=……
………………
这是我的思路,不知道时间要求是否可以达到……囧
问题联盟吧欢迎您!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯