小白


私信TA

用户名:2049001456

访问量:941

签 名:

等  级
排  名 18336
经  验 757
参赛次数 0
文章发表 5
年  龄 0
在职情况 学生
学  校 烟台大学文经学院
专  业

  自我简介:

TA的其他文章

解题思路:用两个数(a,b)相除取余数t,为了方便待会计算最小公倍数保持(a,b)值不变,就分别把它们赋给(m,n)来计算。我们可以知道两个正整数的乘积是等于它们最大公约数和最小公倍数的乘积。例如(21,7)它们的最大公约数,最小公倍数(1,105),即21*5=1*105,

注意事项:因为题目数是输入两个正整数m和n,所以就没加判断m或n为0 的情况。其实还有其他算法,最直接的暴力求解法,还有更快的stein算法,大家可以学习一下。
参考代码:

int main(void)

{

int a, b,m,n,t;

scanf("%d %d", &a, &b);

m = a; n = b;//把(a,b)     //赋值给(m,n)

while (t=m%n)                    //循环取余数t,直到为0停止循环

{

m = n;                                 //为了把取余的值(最小值)t,赋值给n继续循环,所以先把之前被除的数n赋给除过的数m

n = t;

}

printf("%d ", n);

printf("%d", n = a * b / n);  //上面说的定理,求出最小公倍数

return 0;

}


//下面这是加了判断为0,防止非法输入的情况


int main(void)

{

int a, b, m, n, t;

scanf("%d %d", &a, &b);

while(a == 0||b == 0)

{

printf("错误,请重新输入\n");

scanf("%d %d", &a, &b);

}

m = a; n = b;

while (t = m % n)

{

m = n;

n = t;

}

printf("%d ", n);

printf("%d", n = a * b / n);

return 0;

}


 

0.0分

1 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

  • «
  • »