【汇编语言实战】最小公倍数和最大公约数

简介: 【汇编语言实战】最小公倍数和最大公约数

C语言描述:


#include <stdio.h>
// 求最大公约数函数
int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}
// 求最小公倍数函数
int lcm(int a, int b) {
    return (a * b) / gcd(a, b);
}
int main() {
    int num1, num2;
    scanf("%d %d", &num1, &num2);
    // 计算最大公约数
    int greatestCommonDivisor = gcd(num1, num2);
    printf("最大公约数为:%d\n", greatestCommonDivisor);
    // 计算最小公倍数
    int leastCommonMultiple = lcm(num1, num2);
    printf("最小公倍数为:%d\n", leastCommonMultiple);
    return 0;
}


汇编语言:


;九章算术法求最大公约数和最小公倍数
 include irvine32.inc
.data
  dat1 dword 98
  dat2 dword 63
  cnt  dword 1
  gcd  dword ?
.code
  main proc
  mov eax,0
  mov ebx,0
  mov eax,dat1
  mov ebx,dat2
eventest:
  test eax,1
  jnz even1 ;eax为偶数,跳转到even1
  jmp again
even1:
  test ebx,1
  jnz even2 ;ebx为偶数,跳转到even2
  jmp again
even2:
  shr eax,1 ;eax/=2
  shr ebx,1 ;ebx/=2
  shl cnt,1 ;cnt*=2
  jmp eventest
again:
  cmp eax,ebx ;比较两个数据大小,保证大数减去小数
  jg big
  jl small
  je next
big:
  sub eax,ebx
  jmp again
small:
  sub ebx,eax
  jmp again
next:
  mul cnt
  mov gcd,eax ;算出最大公约数
  call writeint ;输出最大公约数
  call crlf
  mov eax,dat1
  mul dat2
  div gcd  ;最小公倍数=dat1*dat2/gcd
  call writeint
  exit
  main endp
  end main



运行结果:

目录
相关文章
|
1月前
|
C语言
【汇编语言实战】实现九九乘法表
【汇编语言实战】实现九九乘法表
21 2
|
1月前
|
C语言
【汇编语言实战】实现输出集合{1,2,...,n}全排列
【汇编语言实战】实现输出集合{1,2,...,n}全排列
18 1
|
1月前
|
C语言
【汇编语言实战】给定一个句子,将大写字母变为小写
【汇编语言实战】给定一个句子,将大写字母变为小写
24 1
|
1月前
|
C语言
【汇编语言实战】二分查找
【汇编语言实战】二分查找
14 1
|
1月前
|
C语言
【汇编语言实战】正整数的素数分解
【汇编语言实战】正整数的素数分解
21 1
|
1月前
|
C语言
【汇编语言实战】输入一个无符号整数求其逆序
【汇编语言实战】输入一个无符号整数求其逆序
21 2
|
1月前
|
C语言
【汇编语言实战】两个32位数的相加运算
【汇编语言实战】两个32位数的相加运算
24 2
|
1月前
|
C语言
【汇编语言实战】八皇后问题
【汇编语言实战】八皇后问题
20 2
|
1月前
|
C语言
【汇编语言实战】解迷宫问题
【汇编语言实战】解迷宫问题
20 2
|
1月前
|
算法 C语言 网络架构
【汇编语言实战】整数拆分问题
【汇编语言实战】整数拆分问题
20 2