用free pascal 如何快速算出一个无理小数小数点后的第k(k可能很大,几百万几亿)位上的数字 10
用freepascal如何快速算出一个无理小数小数点后的第k(k可能很大,几百万几亿)位上的数字求神牛,比如,输入两个数a,b,求a/b小数点后第K位的数字。如果能写个例...
用free pascal 如何快速算出一个无理小数小数点后的第k(k可能很大,几百万几亿)位上的数字
求神牛,比如,输入两个数a,b,求a/b小数点后第K位的数字。如果能写个例程更好 展开
求神牛,比如,输入两个数a,b,求a/b小数点后第K位的数字。如果能写个例程更好 展开
3个回答
展开全部
var a:array[1..2000000]of longint;
t,k,l,r,n,m:longint;
g:text;
procedure qsort(l,r:longint);
var k,t,m,n,i:longint;
begin
i:=(l+r)div 2;
m:=l;n:=r;
k:=a[i];
repeat
while a[m]<k do inc(m);
while a[n]>k do dec(n);
if m<=n then
begin
t:=a[m];
a[m]:=a[n];
a[n]:=t;
inc(m);
dec(n);
end;
until m>n;
if n>l then qsort(l,n);
if m<r then qsort(m,r);
end;
begin
readln(n,k);
for t:=1 to n do read(a[t]);
qsort(1,n);
m:=a[n-k+1]-a[k];
k:=abs(m);
if (k=1)or(k=0) then writeln('NO')
else if (k=2)or(k=3) then writeln('YES')
else
begin
for t:=2 to trunc(sqrt(k)) do
if k mod t=0 then break;
if k mod t=0 then writeln('NO') else writeln('YES');
end;
writeln(m);
end.
t,k,l,r,n,m:longint;
g:text;
procedure qsort(l,r:longint);
var k,t,m,n,i:longint;
begin
i:=(l+r)div 2;
m:=l;n:=r;
k:=a[i];
repeat
while a[m]<k do inc(m);
while a[n]>k do dec(n);
if m<=n then
begin
t:=a[m];
a[m]:=a[n];
a[n]:=t;
inc(m);
dec(n);
end;
until m>n;
if n>l then qsort(l,n);
if m<r then qsort(m,r);
end;
begin
readln(n,k);
for t:=1 to n do read(a[t]);
qsort(1,n);
m:=a[n-k+1]-a[k];
k:=abs(m);
if (k=1)or(k=0) then writeln('NO')
else if (k=2)or(k=3) then writeln('YES')
else
begin
for t:=2 to trunc(sqrt(k)) do
if k mod t=0 then break;
if k mod t=0 then writeln('NO') else writeln('YES');
end;
writeln(m);
end.
展开全部
program a1;
var a:array[1..2000000]of longint;
t,k,l,r,n,m:longint;
g:text;
procedure qsort(l,r:longint);
var k,t,m,n,i:longint;
begin
i:=(l+r)div 2;
m:=l;n:=r;
k:=a[i];
repeat
while a[m]<k do inc(m);
while a[n]>k do dec(n);
if m<=n then
begin
t:=a[m];
a[m]:=a[n];
a[n]:=t;
inc(m);
dec(n);
end;
until m>n;
if n>l then qsort(l,n);
if m<r then qsort(m,r);
end;
begin
readln(n,k);
for t:=1 to n do read(a[t]);
qsort(1,n);
m:=a[n-k+1]-a[k];
k:=abs(m);
if (k=1)or(k=0) then writeln('NO')
else if (k=2)or(k=3) then writeln('YES')
else
begin
for t:=2 to trunc(sqrt(k)) do
if k mod t=0 then break;
if k mod t=0 then writeln('NO') else writeln('YES');
end;
writeln(m);
end.
运行过了,对的,可以就用了吧
var a:array[1..2000000]of longint;
t,k,l,r,n,m:longint;
g:text;
procedure qsort(l,r:longint);
var k,t,m,n,i:longint;
begin
i:=(l+r)div 2;
m:=l;n:=r;
k:=a[i];
repeat
while a[m]<k do inc(m);
while a[n]>k do dec(n);
if m<=n then
begin
t:=a[m];
a[m]:=a[n];
a[n]:=t;
inc(m);
dec(n);
end;
until m>n;
if n>l then qsort(l,n);
if m<r then qsort(m,r);
end;
begin
readln(n,k);
for t:=1 to n do read(a[t]);
qsort(1,n);
m:=a[n-k+1]-a[k];
k:=abs(m);
if (k=1)or(k=0) then writeln('NO')
else if (k=2)or(k=3) then writeln('YES')
else
begin
for t:=2 to trunc(sqrt(k)) do
if k mod t=0 then break;
if k mod t=0 then writeln('NO') else writeln('YES');
end;
writeln(m);
end.
运行过了,对的,可以就用了吧
追问
我的意思是,输入a,b(a,b:longint),t:=a/b 求t小数点后第K位的那个数字是多少
追答
就是呀
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
思路:
找循环节为a位,循环节为b(string)
高精度取余 k mod a
输出
找循环节为a位,循环节为b(string)
高精度取余 k mod a
输出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询