level 5
pascal大神帮帮忙,给个简单点的代码。
题目如下:
辗转相除法是求两个自然数最大公约数的常用方法。设a,b是两个整数,求a除以b的余数r,若r为零,则b即为最大公约数;否则a,b的最大公约数为b,r的最大公约数。如设a=126,b=48,a除以b的余数为30(非0),48除以30的余数为18(非0),30除以18的余数12(非0),18除以12的余数为6(非0),而12除以6的余数为0,故126与48的最大公约数为2。
编程对任意输入的两个正整数,求它们的最大公约数。要求由函数实现。
2013年08月05日 09点08分
1
level 10
var t,a,b:integer;
function gys(a,b:integer);
var r:integer;
begin
repeat
r:=a mod b;
if r=0 then
gys:=b;
until r=0;
end;
begin
read(a,b);
if a<b then
writeln(gys(b,a))
else
writeln(gys(a,b));
end.
应该没有问题吧……
2013年08月05日 10点08分
3
额,你看下,你的函数好像不对,有可能死循环把……
2013年08月05日 10点08分
好吧,再加一句a:=b;b:=r;
2013年08月05日 12点08分
level 11
var
a,b:longint;
function f(a,b:longint):longint;
begin
if b=0 then exit(a);
exit(f(b,a mod b));
end;
begin
readln(a,b);
writeln(f(a,b));
end.
2013年08月05日 10点08分
4
为啥运行不鸟~囧
2013年08月05日 10点08分
回复 爱的短暂篇 :在end.前加上readln;
2013年08月05日 10点08分
哥们,楼主连辗转相除都不会,你还给他递归。。
2013年08月14日 23点08分
回复 courage17340 :好吧我2了,原来楼主就是要这个。。
2013年08月14日 23点08分
level 5
exit后面只能加;了吧……反正我的运行时错误就在那……
2013年08月05日 10点08分
5
level 12
function gcd(x,y:longint):longint;
begin
if y=0
then gcd:=x
else gcd:=gcd(y,x mod y);
end;
手机党。。。LZ谅解一下。。。
2013年08月05日 10点08分
6
如果只能用exit;的话就是这样了吧。。。
2013年08月05日 10点08分
回复 死刘 :我的环境是竞赛环境Lazarus,你们是什么?不会不一样把
2013年08月05日 12点08分
回复 爱的短暂篇 :应该不一样吧。。。我一般用free pascal。。。lazarus不大会用。。。
2013年08月05日 23点08分
回复 爱的短暂篇 :不一样也能读= =话说层主确定要用递归?理解起来麻烦不少呢= =
2013年08月05日 23点08分