免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: ly4885806
打印 上一主题 下一主题

求多个数的最大公约数!!(请高手指教!!!) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-01-04 00:25 |只看该作者

  1. #include<stdio.h>
  2. main()
  3. {
  4.         unsigned short m,n,l;
  5.         scanf("%u,%u",&m,&n);
  6.         printf("The greatest common divisor of %u and %u is ",m,n);
  7.         if (m<n)
  8.         {
  9.                 l=m;
  10.                 m=n;
  11.                 n=l;
  12.         }
  13.         while (m%n!=0)
  14.         {
  15.                 l=m;
  16.                 m=m%n;
  17.                 n=l;
  18.         }
  19.         printf("%u\n",n);


  20. }
复制代码

论坛徽章:
0
12 [报告]
发表于 2006-01-04 07:56 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
13 [报告]
发表于 2006-01-04 08:03 |只看该作者

回11楼

这个行吗?!

论坛徽章:
0
14 [报告]
发表于 2006-01-05 16:25 |只看该作者
楼主:本人开始列出的程序有些错误,经过我的不懈努力,终于找到错误并改了过来。关于注释大家可千万别看,那是我为了让女朋友看懂而弄的(呵呵,俺女朋友比较笨),在座的还用不着看。
哪位能说出的原来程序出错原因,就请说一下吧!
#include<stdio.h>
#define N 4   //宏定义  这里定义求4(N)个数的最大公约数
int min(int a[]); //用来寻找N个数最小的那一个数 并返回出来
int chan(int a[]); //用来判断一个数组中的元素是否都为0 ,是返回1 否则返回0
void main()
{
        int a[N],i,j,t,p[N],q;
    for(i=0;i<N;i++)
                scanf("%d",a+i);  //输入N个数
    t=min(a);   //找出最小的数
        for(j=t;j>1;j--)
    {
                for(i=0;i<N;i++)
        p=a%j;   //将数组A中的数对J取余 将得到的数分别赋给数组P
        q=chan(p);   //调用函数 判断数组P中的数是否都为0
        if(q)    //用于判断
        {
                        printf("成功,最大公约数为:%d\n",j);
            break;  //因为求最大公约数 所以找到一个立刻退出循环
        }
        }
    if(j==1)  printf("不存在最大公约数");//J=1时 表示没有找出最大公约数
}
int min(int a[])
{
        int i,min=a[0];
    for(i=0;i<N;i++)
                if(min>*(a+i))   min=*(a+i);
                return min;
}
int chan(int a[])
{
        int i;
        for(i=0;i<N;i++)
                if(a!=0)  return 0;  //函数中只要执行了一个RETURN后 函数便立刻结束
                return 1;
}

论坛徽章:
0
15 [报告]
发表于 2006-01-05 16:30 |只看该作者
大家注意:十一楼的程序错了

论坛徽章:
0
16 [报告]
发表于 2006-01-05 16:43 |只看该作者
efficiency!!

论坛徽章:
0
17 [报告]
发表于 2006-01-05 17:19 |只看该作者
不好意思,我给出的是以辗转相除法两个数的代码。另任何两个正整数都有最大公约数的,最小为一。还有解决这样的问题数学模型要好,比如找一个数的因子,只要找比sqrt(N)范围的可整除的数即可。另外,N个数的最大公约数可以两两相求一次循环就可以了。

论坛徽章:
0
18 [报告]
发表于 2006-01-05 20:18 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP