当前位置: 代码迷 >> C语言 >> [求助]多个数的公约数,公倍数问题
  详细解决方案

[求助]多个数的公约数,公倍数问题

热度:242   发布时间:2005-09-15 15:06:00.0
[求助]多个数的公约数,公倍数问题
各位同仁,请问任意输入n个数字,求最大公约数,和最小公倍数怎么写?我只会写两个数字的,多个数字的不知道算法如何。谢谢啦。。。
搜索更多相关的解决方案: 公约数  倍数  

----------------解决方案--------------------------------------------------------
递归呗。比如要求a,b,c的最大公约数,你就先求a,b的最大公约数,设为m,再求m,c的最大公约数就可以了。
----------------解决方案--------------------------------------------------------
对哦,谢谢了。
----------------解决方案--------------------------------------------------------

我写出来了,可能有点乱,高手点评一下,谢谢 #include "stdio.h" #define N 10 main() { int CD(int a[],int n); int a[N] ,n, i,cd ,p,f; printf("input the amount:"); scanf("%d",&n); printf("you input %d number.\n",n); for (i=0;i<n;i++) { scanf("%d",&a[i]); } p=1; for(i=0;i<n;i++) { p=p*a[i]; } cd = CD(a,n); f=p/cd; if (cd!=1) printf("the common divisor is:%d\n",cd); else printf("No common divisor\n"); printf("the common multiple is:%d\n",f); }

CD(int arr[N],int n) { int i, m , k ,r,b,c,temp,temp2; if (arr[0]<arr[1]) { temp = arr[0]; arr[0] = arr[1]; arr[1] = temp; } k=arr[0];m=arr[1]; while (m!=0) { r=k%m; k = m; m = r; } for (i=2;i<n;i++) { c= arr[i]; if (k<c) { temp2 = c; c = k; k = temp2; } while(c!=0) { b=k%c; k=c; c=b; } } return(k); }


----------------解决方案--------------------------------------------------------
  相关解决方案