黑马程序员技术交流社区

标题: 求最大公约数和最小公倍数的函数问题 [打印本页]

作者: 这是829    时间: 2015-5-26 21:43
标题: 求最大公约数和最小公倍数的函数问题
输入两个数,求最小公倍数和最大公约数
我写的答案是
#include <stdio.h>
int main(){
    //定义两个边变量用来接收用户输入的数值
    int a,b;
//提示用户输入两个数
    printf("请用户输入两个数\n");
    //接收用户输入的两个数
    scanf("%d,%d",&a,&b);
    //计算
   
    int mov,les;
    mov = a>b?a:b;
    les =a<b?a:b;
    for (int k=les; k>=1; k--) {
        if(mov%k==0&&les%k==0){
            printf("最大公约数就是%d\n",k);
            break;
        }
    }
    for (int i=1; ; i++) {
        if((i*mov)%les==0){
            printf("最小公倍数是%d\n",i*mov);
            break;
        }
    }
    return 0;
}
我自己试了试几个数儿,也算正确但是和老师给的标准答案不一样求解我做的到底对还是不对求大神帮忙分析一下我数学不是很好老师给的标准答案如下
#include <stdio.h>
int main(int argc, const char * argv[])
{
    int num1 = 0;
    int num2 = 0;
    int gcd = 0; //最大公约数
    int lcm = 0; //最小公倍数
    printf("请输入两个数:\n");
    scanf("%d%d", &num1, &num2);
    int product = num1*num2;
   
    if (num1 > num2)//始终让num1是最小数。
    {
        int temp = num1;
        num1 = num2;
        num2 = temp;
    }
   
    for (int i = num1; i > 0; i--) {
        if (num1%i == 0 && num2%i == 0) {
            gcd = i;
            break;
        }
    }
    lcm = product/gcd;
    printf("gcd = %d\n", gcd);
    printf("lcm = %d\n", lcm);
    return 0;
}

求最大公约数和最小公倍数的方法不一样不知道我做的的对不对看老师的答案我也看不明白
作者: 这是829    时间: 2015-5-27 21:09
为何没人啊啊!!
作者: fixer    时间: 2015-5-27 22:16
有点麻烦了吧
作者: woaidd99    时间: 2015-5-27 23:08
看起来 都对啊  
作者: x331275955    时间: 2015-5-27 23:10
大概意思都差不多吧,只不过老师的方法意思是最大公约数和最小公倍数之间有个倍数关系,答案求一个就知道了第二个,而你是计算两次得来的的,可能答案更精简一点吧,其实我也是算了两次才的出来的.
作者: talent123    时间: 2015-5-28 21:13
老师那个是最小公倍数的一种数学求解方法 第二次就不用再遍历循环了

作者: 这是829    时间: 2015-6-4 23:59
x331275955 发表于 2015-5-27 23:10
大概意思都差不多吧,只不过老师的方法意思是最大公约数和最小公倍数之间有个倍数关系,答案求一个就知道了第 ...

ok,谢谢啊,都对就可以啦
作者: 李竞还活着    时间: 2015-6-5 00:24

if (num1 > num2)//始终让num1是最小数。
    {
         int temp = num1;
         num1 = num2;
         num2 = temp;
     }
能不能去掉上面一段if语句,直接从for循环开始?这样算虽然很可能会慢一些,但是代码简单多了。
for (int i = num1; i > 0; i--) {
         if (num1%i == 0 && num2%i == 0) {
             gcd = i;
             break;
         }
     }


作者: fixer    时间: 2015-6-5 07:28
考虑的东西有点多,不过这是好事,想办法再精简一下代码就更好了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2