题目:求两个正整数的最大公约数和最小公倍数。
基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约数问题。
2.求3个正整数的最大公约数和最小公倍数。
方法一
#include
int Max(int a,int b);//最大公约数函数的声明
int main()
{
int flag=1;//是否循环的判定
int m;
while(flag)
{
int num1,num2;//输入的两个数
int temp,max; //max是最大公约数
printf("请输入两个数字:\n");
scanf("%d %d",&num1,&num2);
if(num1
方法二
#include
using namespace std;
class Test
{
public:
int a,b;
void swap(int *,int *);
int Max(int a,int b);//求最大公约数
} ;
void Test::swap(int *a,int *b)//异或法交换位置
{
*a=*a^*b;
*b=*b^*a;
*a=*a^*b;
}
int Test::Max(int a,int b)//辗转相减法
{
while(a!=b)
{
if(a>b) a=a-b;
else b=b-a;
}
return a;
}
int main()
{
int a,b,*p1,*p2;
int m,flag=1;
int temp;
Test mm;
while(flag)
{
cout<<"请输入数字:";
cin>>a>>b;
p1=&a,p2=&b;
if(a>temp;
if(temp==0) flag=0;
}
return 0;
}
方法3
#include
void swap(int *a,int *b);
int main()
{
int num1,num2,*m1,*m2;
int i;
int m,flag=1;
while(flag)
{
printf("请输入两个数:");
scanf("%d %d",&num1,&num2);
m1=&num1;m2=&num2;
if(num1=1;i--)//穷举法
{
if(num1%i==0&&num2%i==0)
break;
}
printf("最大公约数为:%d\n",i);
printf("最小公倍数为:%d\n",num1*num2/i);
printf("继续请输入1,退出请按0:");
scanf("%d",&m);
if(m==0) flag=0;
}
}
void swap(int *a,int *b)//加和法
{
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}