求其最大公约数和最小公倍数

例题:输入两个正整数m和n,求其最大公约数和最小公倍数。

TIP:两个数的最大公约数 x 最小公倍数 = M x N。

/程序分析:利用辗除法。/
/* 除数变被除数 /
/
余数变除数 */


#include"stdio.h"
main()
{
	int a,b,num1,num2,temp;
	printf("please input two numbers:\n");
	scanf("%d",&num1);//输入num1的值
	scanf("%d",&num2);//输入num2的值
	if(num1<num2)
	{ 
		temp=num1;
		num1=num2;
		num2=temp;
	}
	a=num1;b=num2;
	while(b!=0)/*利用辗除法,直到b为0为止*/
	{
		temp=a%b;
		a=b;	
		b=temp;	
	}
	printf("约数: %d\n",a);
	printf("倍数: %d\n",num1*num2/a);
	return 0;
}

显示

在这里插入图片描述

汇编
2: main()
3: {
00401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,54h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-54h]
0040101C mov ecx,15h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
4: int a,b,num1,num2,temp;
5: printf(“please input two numbers:\n”);
00401028 push offset string “please input two numbers:\n” (00425038)
0040102D call printf (00401170)
00401032 add esp,4
6: scanf("%d",&num1);//输入num1的值
00401035 lea eax,[ebp-0Ch]
00401038 push eax
00401039 push offset string “%d” (00425034)
0040103E call scanf (00401110)
00401043 add esp,8
7: scanf("%d",&num2);//输入num2的值
00401046 lea ecx,[ebp-10h]
00401049 push ecx
0040104A push offset string “%d” (00425034)
0040104F call scanf (00401110)
00401054 add esp,8
8: if(num1<num2)
00401057 mov edx,dword ptr [ebp-0Ch]
0040105A cmp edx,dword ptr [ebp-10h]
0040105D jge main+61h (00401071)
9: {
10: temp=num1;
0040105F mov eax,dword ptr [ebp-0Ch]
00401062 mov dword ptr [ebp-14h],eax
11: num1=num2;
00401065 mov ecx,dword ptr [ebp-10h]
00401068 mov dword ptr [ebp-0Ch],ecx
12: num2=temp;
0040106B mov edx,dword ptr [ebp-14h]
0040106E mov dword ptr [ebp-10h],edx
13: }
14: a=num1;b=num2;
00401071 mov eax,dword ptr [ebp-0Ch]
00401074 mov dword ptr [ebp-4],eax
00401077 mov ecx,dword ptr [ebp-10h]
0040107A mov dword ptr [ebp-8],ecx
15: while(b!=0)/利用辗除法,直到b为0为止/
0040107D cmp dword ptr [ebp-8],0
00401081 je main+8Bh (0040109b)
16: {
17: temp=a%b;
00401083 mov eax,dword ptr [ebp-4]
00401086 cdq
00401087 idiv eax,dword ptr [ebp-8]
0040108A mov dword ptr [ebp-14h],edx
18: a=b;
0040108D mov edx,dword ptr [ebp-8]
00401090 mov dword ptr [ebp-4],edx
19: b=temp;
00401093 mov eax,dword ptr [ebp-14h]
00401096 mov dword ptr [ebp-8],eax
20: }
00401099 jmp main+6Dh (0040107d)
21: printf(“约数: %d\n”,a);
0040109B mov ecx,dword ptr [ebp-4]
0040109E push ecx
0040109F push offset string “\xd4\xbc\xca\xfd: %d\n” (00425028)
004010A4 call printf (00401170)
004010A9 add esp,8
22: printf(“倍数: %d\n”,num1*num2/a);
004010AC mov eax,dword ptr [ebp-0Ch]
004010AF imul eax,dword ptr [ebp-10h]
004010B3 cdq
004010B4 idiv eax,dword ptr [ebp-4]
004010B7 push eax
004010B8 push offset string “\xb1\xb6\xca\xfd: %d\n” (0042501c)
004010BD call printf (00401170)
004010C2 add esp,8
23:
24: return 0;
004010C5 xor eax,eax
25: }
004010C7 pop edi
004010C8 pop esi
004010C9 pop ebx
004010CA add esp,54h
004010CD cmp ebp,esp
004010CF call __chkesp (004011f0)
004010D4 mov esp,ebp
004010D6 pop ebp
004010D7 ret

2021/2/12

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值