小白


私信TA

用户名:2049001456

访问量:749

签 名:

等  级
排  名 17130
经  验 737
参赛次数 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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区