求两个数的最大公约数和最小公倍数的C程序

昨天C语言上机课,编几个程序,其中就有“求两个数的最大公约数和最小公倍数”,颇自豪地我较早就编出来了^_^

但最大公约数那题后来调试时发现如果不是输入本身就能整除的两数就会输出两数的最小值,因为程序找到最大公约数后仍在运行,直到大于两数的最小值。回来后继续试还是失败。上网找答案,发现颇复杂地用到“辗转相除法”,据说老师提示的也是那个。

本人愚钝,还是觉得复杂难理解,我觉得我的程序应该还是可行的,就差一句……今早再次修改,终于OK啦!太有成就感了!

也许方法比较菜,但也是与我在网上见到的颇不相同的,分享下!

这是最大公约数的:

main()
{
int m,n,a,b,i;
printf(“input m n”);
scanf(“%d%d”,&m,&n);
if(m>=n)i=n;
else i=m;
a=1;
while (a<=i)
{
(m%a==0)&&(n%a==0);
if ((m%a==0)&&(n%a==0)) b=a;
a++;
}
printf(“%d”,b);
}

这是最小公倍数的;

main()
{
int m,n,i,a;
printf(“input m n”);
scanf(“%d%d”,&m,&n);
if(m>=n) i=m;
else i=n;
a=i;
while(a>=i)
{
(a%n==0)&&(a%m==0);
break;
a++;
}
printf(“%d”,a);
}

14 Thoughts

  1. 貌似好靓

    未学到while循环。。前面睇得明。。后面5明。。

    yy学编程。。肯定很有趣。。

  2. 小蔚同学

    俺这文科生,学的是vb^……编个闰年都费了个半条气……
    Option Explicit
    Dim y As String
    Dim m As String

    Private Sub Command1_Click()

    y = Val(Text1.Text)
    m = Text2.Text
    Select Case m
    Case 1, 3, 5, 7, 8, 10, 12
    Label1.Caption = 31
    Case 4, 6, 9, 11
    Label1.Caption = 30
    Case 2
    If y Mod 4 = 0 And y Mod 100 0 Then
    Label1.Caption = 29
    ElseIf y Mod 400 = 0 Then
    Label1.Caption = 29
    Else
    Label1.Caption = 28
    End If
    End Select
    End Sub

    多谢信工学院的师兄……

  3. 貌似好靓

    上面的VB算法不错。。不过C的条例更清楚。。

    某次交作业赶时间,偷左YY份程序上交。。5好意思。。。
    不过。。引号用左全角。。汗。。。

  4. Snowyy

    不是我的錯誤,那確實是半角符號,再後台仍顯示正常,到了這裡就成全角了,甚不解中???

    另,假期追收版權費!

  5. Anonymous

    #include
    int main()
    {
    int a,b,c,d;
    d=1;
    scanf(“%d%d”,&a,&b);
    if(a>=b)
    c=a;
    else
    c=b;
    d=c;
    while(d>=c)
    {
    if((d%a==0)&&(d%b==0))
    break;
    else
    d++;
    }
    printf(“%d\n”,d);
    return 0;
    }
    楼主最小公倍数不对

    1. Snowyy Post author

      回复主您好!这是6年前的古老博文了,C语言已经完全还给老师。我写得错不错,您写对不对,我已经无从判断了。~~(°°;))))

    1. Snowyy Post author

      您好,不好意思这是2007年4月28日,整整8年前的博文了,C语言都已还给老师,所以难以解答您的问题,抱歉。

Comments are closed.