寻找两个正整数的最大公约数和最小公倍数

就是这样的一个问题,还在想什么?
快来看看!
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
方法一:

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	int m, n, y=0, i, j, z; 
	int x[1000];	
	
	scanf("%d %d",&m,&n);
	
	if (m < n) 
		z = m;						//得到较小的数 
	if (m > n)
		z = n;	
	
	for (i = 2; i <=z; i++){		//找到公约数,并放入整数型数组中 
		if ((m % i) == 0 && (n % i) == 0)
			x[i-2] = i;	
		else 
				x[i-2]=0;				//数组内部不能跳跃空白元素。 
	}
	
	for (j = 0; j < z-1; j++){	
		if (y < x[j])				//找到数组中最大的数 ,即最大公约数 
			y = x[j];
	}
	printf("最大公约数:%d\n", y);				//得到最大公约数 	
	printf("最小公倍数:%d\n",(m * n)/ y);		//最小公倍数 = 原来两个正整数之积除以它们的最大公约数 

	return 0;
}

简述一下我的思路:
找到两个数的公因数并放入时整型数组当中,通过查找数组中最大的数得到最大公约数。因而并解决最小公倍数(等于原两个数之积除以最大公约数)
我在写编程的时候遇到了一些问题,在不断的帮助和调试下最终完成,并有一下几点收获:

  1. 声明数组时,需要确定数组的具体长度。当数组内初始化元素的情形除外,计算机此时自动形成数组长度。
  2. 数组内部元素有序,元素不能跳跃空白进入。此时在循环中需尤其注意,另外解决方法有其一是,当该元素为空白时,不妨置为0,即利用if…else…语句。
  3. 在后期不断调试的过程,需要根据结果调动。在逻辑思路正确的情况下依然存在结果输出的偏差时,尝试调动一些较小因素,如 for循环的界定条件,<= 与 < 之间的差别。

方法二:

#include<stdio.h>
int main()
{
    int a,b,t,r;
    printf("请输入两个数字:\n");
    scanf("%d %d",&a,&b);
    if(a<b)
    {t=b;b=a;a=t;}
    r=a%b;
    int n=a*b;
    while(r!=0)
    {
        a=b;
        b=r;
        r=a%b;
    }
    printf("这两个数的最大公约数是%d,最小公倍数是%d\n",b,n/b);
    
    return 0;
}

最后总结,学习是漫长的路程,需要一步一步自己去走、去领会,当然路途有人陪伴并给予帮助是件更美的事,愿所有的学习快乐都等与你相伴!

猜你喜欢

转载自blog.csdn.net/weixin_44566432/article/details/87911273