题目及程序:
/**
9. 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。( 程序分析:利用辗除法。)
**/
//求最大公约数
int searchGCM(int aNumber,int bNumber){
int GCM,remainder=0,temp=0,tag=-1;//remainder存放余数,temp用于交换
//首先要保证aNumber>=bNumber
if (aNumber<bNumber) {
temp=aNumber;
aNumber=bNumber;
bNumber=temp;}
while (aNumber%bNumber!=0) {
tag=0;//标记两个数不互为质数
temp=aNumber%bNumber;//temp是余数
aNumber=bNumber;
bNumber=temp;
}
// GCM=(tag==-1?0:bNumber);//互素返回0
return bNumber;
}
//求最小公倍数=(a*b)/GCM
int searchLCM(int GCM,int aNumber,int bNumber){
int LCM;
if (GCM!=0) {//最大公约数不为0
LCM=(aNumber*bNumber)/GCM;
}else{
LCM=aNumber*bNumber;
}
return LCM;
}
int main(){
int aNumber,bNumber,GCM;
printf("----求两个数的最大公约数和最小公倍数----\n");
printf("请输入两个不为0的数:\n");
scanf("%d %d",&aNumber,&bNumber);
while(aNumber*bNumber==0){//输入数字中有0
printf("请输入两个非0数字!请重新输入:\n");
scanf("%d %d",&aNumber,&bNumber);
}
GCM=searchGCM(aNumber,bNumber);
printf("%d和%d的最大公约数是%d\n",aNumber,bNumber,GCM);
printf("%d和%d的最小公倍数是%d\n",aNumber,bNumber,searchLCM(GCM,aNumber,bNumber));
return 0;
}
运行: