就是这样的一个问题,还在想什么?
快来看看!
题目:输入两个正整数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;
}
简述一下我的思路:
找到两个数的公因数并放入时整型数组当中,通过查找数组中最大的数得到最大公约数。因而并解决最小公倍数(等于原两个数之积除以最大公约数)
我在写编程的时候遇到了一些问题,在不断的帮助和调试下最终完成,并有一下几点收获:
- 声明数组时,需要确定数组的具体长度。当数组内初始化元素的情形除外,计算机此时自动形成数组长度。
- 数组内部元素有序,元素不能跳跃空白进入。此时在循环中需尤其注意,另外解决方法有其一是,当该元素为空白时,不妨置为0,即利用if…else…语句。
- 在后期不断调试的过程,需要根据结果调动。在逻辑思路正确的情况下依然存在结果输出的偏差时,尝试调动一些较小因素,如 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;
}
最后总结,学习是漫长的路程,需要一步一步自己去走、去领会,当然路途有人陪伴并给予帮助是件更美的事,愿所有的学习快乐都等与你相伴!