解题思路:

这段代码的主要目的是求解两个整数的最大公约数和最小公倍数。


1. 最大公约数(Greatest Common Divisor,GCD):

   - 首先,通过`da`函数计算最大公约数。

   - 在`da`函数中,首先判断输入的两个整数n和m的大小,将较大的值赋给变量a,较小的值赋给变量b。

   - 然后,从a开始递减遍历到2,检查a和b是否都能被i整除。如果满足条件,则返回当前的i作为最大公约数。


2. 最小公倍数(Least Common Multiple,LCM):

   - 接着,通过`xiao`函数计算最小公倍数。

   - 在`xiao`函数中,首先计算n和m的乘积j,将其赋值给变量min。

   - 然后,从j开始递减遍历到2,检查j是否能同时被n和m整除,并且是否小于当前的min。如果满足条件,则更新min的值为当前的i。

   - 最后,返回min作为最小公倍数。



注意事项:

1. 在da函数中,当a和b都为0时,循环将无法终止,导致程序陷入死循环。需要在循环条件中添加对a和b是否为0的判断。


2. 在xiao函数中,min的初始值设置为1000可能不够大,可能会导致在某些情况下无法找到正确的最小公倍数。可以将min的初始值设置为一个较大的数,例如INT_MAX。



参考代码:

#include<stdio.h>

#include<limits.h>

int da(int n,int m){

    int a=(n>m)?n:m;

    int b=(n<m)?n:m;

    if(n==0||m==0) return 0;

    for(int i=a;i>=2;i--){

        if((a%i==0)&&(b%i==0))

        return i;

    }

}

int xiao(int n,int m){

    int j=n*m;

    int min=INT_MAX;

    for(int i=j;i>2;i--){

        if((i%n==0)&&(i%m==0)&&(i<min))

        {

            min=i;

        }

    }

    return min;

}

int main(){

    int n,m;

    scanf("%d %d",&n,&m);

    printf("%d %d",da(n,m),xiao(n,m));

    return 0;

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论