题解 | #小乐乐与欧几里得#

小乐乐与欧几里得

https://www.nowcoder.com/practice/da13e0cf321e4df9acd0fdf0a433cbb0

#include <stdio.h>
//更相减损法
int main() {
    long long n = 0, m = 0, i = 1, max = 0,
              min = 0;  //使用long long类型变量,不然数据会溢出
    scanf("%lld%lld", &n, &m);

    //定义两个变量存储m,n并对大小进行判断
    max = m >= n ? m : n;
    min = m < n ? m : n;


    //两数均为偶数时,对数据进行预处理,减少计算量
    while (max % 2 == 0 && min % 2 == 0) {
        max /= 2;
        min /= 2;
        i *= 2;
    }

    while (max !=
            min) { //减数等于差时循环结束,减数即为最大公约数
        if (max > min)
            max -= min;  //把差赋值给max,返回循环判断
        else
            min -= max;  //把差赋值给min,返回循环判断
    }

    long long num1 = i * max;  //定义变量num1 用来存放最大公约数
    long long num2 = m * n / num1;  //定义变量num2 用来存放最小公倍数

    printf("%lld", num1 + num2);

    return 0;
}

全部评论

相关推荐

小红书 后端选手 n*16*1.18+签字费期权
点赞 评论 收藏
分享
11-08 13:58
门头沟学院 Java
程序员小白条:竟然是蓝桥杯人才doge,还要花钱申领的offer,这么好的公司哪里去找
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务