从今天开始,我决心利用寒假把谭浩强的《C程序设计》(从第6章到第13章)的所有习题做一遍,发表在我的blog上。
算法思路: 可以有三种方法求两数的最大公约数。设m>n。
1. 让k从1变到n,能同时整除m和n的最大的k即为所求。
2. 让k从n变到1,第一个能同时整除m和n的k即为所求。
3. 使用辗转相除法。辗转相除法的算法为:首先将 m除以 n(m>n)得余数 r,再用余数 r 去除原来的除数,得新的余数,重复此过程直到余数为 0时停止,此时的除数就是m 和 n的最大公约数。 经常使用的算法是辗转相除法。 求 m和 n的最小公倍数: m和 n的积除以 m和 n 的最大公约数。我的程序使用的是辗转相除法。由于程序比较简单,所以没有加注释。程序运行环境:Windows2000, VC++6.0。
{
long Temp=0;
if(Num1>=Num2)
{
Temp=Num2;
while((Num1%Num2)!=0)
{
Num2=Num1%Num2;
}
printf("最大公约数为%d\n",Num2);
Temp=( Num1*Temp )/Num2;
printf("最小公倍数为%d\n",Temp);
}
else
{
Temp=Num1;
while((Num2%Num1)!=0)
{
Num1=Num2%Num1;
}
printf("两数的最大公约数为%d\n",Num1);
Temp=( Num2*Temp )/Num1;
printf("两数的最小公倍数为%d\n",Temp);
}
}
{
long Num1=0,Num2=0;
printf("请输入两个整数:\n");
scanf("%d%d",&Num1,&Num2);
MaxandMin(Num1,Num2);
return 1;
}
评论