求n个数的最大公约数和最小公倍数

#include <stdio.h>

#define N 100          /**定义数组长度,自定义**/

int exper(int t[],int n);    /**验证函数**/

/**输入函数,输入个数和计算数,参数为输入数组**/

int input(int t[])

{int i,n;

 int k=1;

printf("请输入所计算值的数目(n>=2):  ");    /**输入计算值个数**/

scanf("%d",&n);

  if (n<2)                              /**判断输入错误**/

{ printf("------输入错误----\n");

return input(t);                            /**重新输入**/

}

 while (k)                               /**当k=1时进入循环**/

{ printf("输入计算值:\n"); 

for (i=0;i<n;i++)

{

       scanf("%d",&t[i]);

}

k=exper(t,n);

}

return n;

}

/**验证函数,验证输入值是否有0**/

int exper(int t[],int n)

{int i;

for(i=0;i<n;i++)

{

       if (!t[i])

{ printf("输入数含0,错误!!!\n");

  return 1;}

}

return 0;}

/**最大公约数**/

int gcd(int a,int b)

 {

while ( a!=b )

{

          if (a>b)

{

a=a-b;     

}

          else  

{

b=b-a; 

}

}

return b;

 }

/**n个数的辗转相除法求最大公约数**/

int Gcd(int t[],int n)

{int i;

int c=t[0];

for (i=1; i<n; i++)

{

       c=gcd(c,t[i]);

}

 return c;

}

/**最小公倍数**/

int lcm(int x,int y)

 {

return x*y/gcd(x,y);

 

 }

/**n个数求最小公倍数**/

int Lcm(int t[],int n)

{int i;

int s=1;

for (i=0;i<n;i++)

{

       s=lcm(s,t[i]);

}

return s;

}

/**主函数**/

int main()

{int t[N];                           /**定义计算值数组**/

int n;                              /**定义数据个数**/

int flag=1;

while (flag)                         /**为1继续输入**/

n=input(t);

printf("最大公约数为 %d\n",Gcd(t,n));  /**输出Gcd函数返回值,最大公约数**/

printf("最小公倍数为 %d\n",Lcm(t,n));  /**输出Lcm函数返回值,最小公倍数**/

printf("退出请按0,继续请按1 :");

scanf("%d",&flag);}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值