1019 Least Common Multiple

本代码片参考了网络上各种大神的代码,如有侵权,请联系我第一时间撤下

/*
要点:1、在计算最小公倍数的时候 要先除后乘 因为有可能两数相乘超出int 
      2、在第一次传递数据的时候,数组传过去的是地址,这样方便支线函数随时调用数组数据
      3、英语水平尽量提高,题目描述和各个数据代表的含义一定要搞明白 
*/ 
#include <stdio.h>
int getGCD(int a,int b);
int doLCM(int*array,int size);
int main(void) {
    int n;
    scanf("%d",&n);                          //输入一共有几组数据
    while(n--) {                            //当n=0 的时候结束循环
        int array[9999];                   //定义一个数组 用来存放数据
        int x;                            //定义每一组数据 有多少个数
        scanf("%d",&x);
        for(int i=0; i<x; i++)         //输入数据
            scanf("%d",&array[i]);
        int result = doLCM(array,x);  //调用最小公倍数函数 将数组地址、数据数量 传入
        printf("%d\n",result);
    }
    return 0;
}
//最小公倍数函数
int doLCM(int* array,int size) {
 //接受主函数传入的数组地址、数据数量 (*表示类型为地址)
    int x,y,num=array[0],i,gcd;
    for(i=0; (i+1)<size; i++) {//每两个数两个数求最小公倍数 循环进行x-1次
        x=num;
        y=array[i+1];
        gcd = getGCD(x,y);//求最大公约数
        num = x/gcd * y ; 
        //求法:两数相乘除以最大公约数则为最小公倍数 num则为两两的最小公倍数 
    }
    return num;
}
//最大公约数函数 
int getGCD(int a,int b) {
    int temp;
    if(a < b) {//必须要保证A>B 
        temp = a;
        a = b;
        b = temp;
    }
    if(a%b == 0) {  
//辗转相除法 若a/b余数为0 则b为最大公约数,若不为零,则将a,b中的小数与余数继续求余数 直到为零 
        return b;
    } else {
        return getGCD(b,a%b);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值