解题思路:
这段代码的主要目的是求解两个整数的最大公约数和最小公倍数。
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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复