天天看点

求其最大公约数和最小公倍数2021/2/12

例题:输入两个正整数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;
}

           

显示

求其最大公约数和最小公倍数2021/2/12

汇编

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

继续阅读