| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4273 人关注过本帖
标题:求最大公约数——不要骂我啊,水平烂
只看楼主 加入收藏
rainyday36
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-3-8
收藏
 问题点数:0 回复次数:24 
求最大公约数——不要骂我啊,水平烂
#include <stdio.h>
void main()
{
    int a,b,c,i,x,y;
    printf("请输入两个正整数\n");
    scanf("%d %d",&a,&b);
    if (a>0&&b>0)
    {   
        c=a<b?a:b;
        int i=1;
    while (i<=c)
    {
        x=a%i;y=b%i;
        if (x==0&&y==0)
            printf ("最大公约数是%d",i);
    }
    printf ("无最大公约数\n");
    }
else printf("两个数不合法\n");
}
求最大公约数
搜索更多相关主题的帖子: 最大公约数 水平 void int main 
2008-04-12 21:32
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
很不幸,你的代码是错的。运行错误。

    你再看看辗转相除法,然后再把代码改进一下。现在运行时,while中是个死循环,没有跳出循环的条件改变语句。
2008-04-12 23:13
yt414204458
Rank: 2
等 级:论坛游民
帖 子:260
专家分:55
注 册:2008-3-1
收藏
得分:0 
#include <stdio.h>
void main()
{
    int a,b,c,i,x,y;
    printf("请输入两个正整数\n");
    scanf("%d %d",&a,&b);
if (a>0&&b>0)
    {   
        c=a<b?a:b;
        i=1;
    while (i<=c)
     {
        x=a%i;y=b%i;i++;
        if (x==0&&y==0)
        printf ("最大公约数是%d",i);
     }
    printf ("无最大公约数\n");
    }
else printf("两个数不合法\n");
}




无最大公约数总是要显示的,不过可以正常运行了,应该在哪里加个跳出循环的语句呢?广陵绝唱能解答一下吗?
2008-04-12 23:32
assess110
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-3-13
收藏
得分:0 
循环条件加在循环体里面哈,看你习惯加在哪了.
#include <stdio.h>
int main()
{
    int a,b,c,i,x,y;
    printf("请输入两个正整数\n");
    scanf("%d %d",&a,&b);
    if (a>0&&b>0)
    {   
        c=a<b?a:b;
        int i=1;
    while (i<=c)
    {
        x=a%i;y=b%i;i++;
        if (x==0&&y==0)
            printf ("最大公约数是%d\n",i);
       else printf ("无最大公约数\n");
    }
    }
else printf("两个数不合法\n");
}
2008-04-13 00:04
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
自己写的一个小代码,测试正常,仅作参考。欢迎大家批评。
程序代码:
/***********************************************************************
                   对于LZ的程序,我就不作评定了,总之结果不对,格式也不对。
                我作了一个辗转相除法的程序,运行正常,请楼主参考一下。
                由于我也初学,不足之处,还望海涵。
************************************************************************/
#include<stdio.h>
void jiaohuan(int *a,int *b)/*交换函数,用于排序*/
{
        int t;
        t=*a;
        *a=*b;
        *b=t;
}
int main(void)
{
        int zhengsu_a,zhengsu_b,yusu;/*定义三个整型变量*/
        char c;
        do
        {
                printf("\n**************************************************\n\n");
                printf("请输入两个正整数,空格格开,enter结束输入:\n");
                scanf("%d %d",&zhengsu_a,&zhengsu_b);
                puts(" ");
                while(c=getchar()!='\n'&&c!=EOF);
                if(zhengsu_a<0||zhengsu_b<0)
                        printf("您输入的数字不合法,请重新输入.\n\n");
        }  /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~输入两个数*/
        while(zhengsu_a<0||zhengsu_b<0);
        if(zhengsu_a<zhengsu_b)
                jiaohuan(&zhengsu_a,&zhengsu_b);/*如果被除数小于除数,交换*/
        while(zhengsu_b!=0)
        {
                yusu=zhengsu_a%zhengsu_b;
                zhengsu_a=zhengsu_b;
                zhengsu_b=yusu; /*辗转相除法的公式,用于求出最大公约数。程序中的精髓也就在于此。
                                  如果把这个while弄明白了,也就会求最大公约数,也会最小公倍数了。*/
        }
        if(zhengsu_a!=1)
                printf("最大公约数为:%d\n",zhengsu_a);
        else
                printf("这两个数没有最大公约数。\n");/*如果最大公约数为1,系统判定它们两数无最大公
                                                       约数*/


        getch();
}



        
2008-04-13 01:59
luozhibruce
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2008-4-12
收藏
得分:0 
int a,b,c,i,x,y;
    printf("请输入两个正整数\n");
    scanf("%d %d",&a,&b);
    if (a>0&&b>0)
    {   
        if(a<b)
        {
            x=a;y=b;
        }
        else
        {
            x=b;y=a;
        }
    while (c!=0)
    {
        c=x%y;
        x=y;y=c;
        i++;
    }
    printf ("最大公约数是%d",x);
    }
    else
        printf("两个数不合法\n");
    printf("\n");
}
2008-04-13 09:02
yd4433
Rank: 1
等 级:新手上路
帖 子:404
专家分:0
注 册:2008-3-9
收藏
得分:0 
if(a<b)
        {
            x=a;y=b;
        }
        else
        {
            x=b;y=a;
        }
多余的 后面直接求就行了

------...-.-..-...-----........-------.......----.....------....||- - !
2008-04-13 12:11
mevenom
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-3-16
收藏
得分:0 
回复 5# 的帖子
有点复杂,好不错
2008-04-13 17:57
夜火
Rank: 1
等 级:新手上路
帖 子:149
专家分:0
注 册:2007-5-30
收藏
得分:0 
5#的 哪好了  代码很长 .....实际作用啰嗦太多...
#include <stdio.h>
#include <math.h>
#define min(a,b) (a-b)/abs(a-b)?b:a
void main()
{
  int a,b,i;
  scanf("%d%d",&a,&b);
  i=min(a,b);
  if(i<0){
    printf("输入错误!");
    exit(1);
  }
  while(1){
    if(a%i==0&&b%i==0)
      break;
   i--;
  }
  if(i==1)
    printf("%d %d 无最大公约数");
  printf("%d %d 最大公约数是%d",a,b,i);
}

2008-04-13 23:01
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 9# 的帖子
呵呵,谢谢楼上指点,不过你的程序中也存在着2个bug。
一:输入负数和0居然还能出现公约数;
二:无最大公约数后,还紧跟着一个最大公约数为1。


    不过这也都是小问题,请楼上更正,以免误导。
2008-04-14 00:09
快速回复:求最大公约数——不要骂我啊,水平烂
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026912 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved