A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

输入两个数,求最小公倍数和最大公约数
我写的答案是
#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;
}

求最大公约数和最小公倍数的方法不一样不知道我做的的对不对看老师的答案我也看不明白

8 个回复

正序浏览
考虑的东西有点多,不过这是好事,想办法再精简一下代码就更好了
回复 使用道具 举报

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;
         }
     }

回复 使用道具 举报
x331275955 发表于 2015-5-27 23:10
大概意思都差不多吧,只不过老师的方法意思是最大公约数和最小公倍数之间有个倍数关系,答案求一个就知道了第 ...

ok,谢谢啊,都对就可以啦
回复 使用道具 举报
老师那个是最小公倍数的一种数学求解方法 第二次就不用再遍历循环了
回复 使用道具 举报
大概意思都差不多吧,只不过老师的方法意思是最大公约数和最小公倍数之间有个倍数关系,答案求一个就知道了第二个,而你是计算两次得来的的,可能答案更精简一点吧,其实我也是算了两次才的出来的.
回复 使用道具 举报
看起来 都对啊  
回复 使用道具 举报
fixer 来自手机 中级黑马 2015-5-27 22:16:54
藤椅
有点麻烦了吧
回复 使用道具 举报
为何没人啊啊!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马