#include<stdio.h>
int gcd(int m,int n);
int min(int m,int n,int g);
int main(void)
{
int m,n,g1,g2;
printf("请输入两个数字:\n");
scanf("%d%d",&m,&n);
g1 = gcd(m,n);
g2 = min(m,n,g1);
printf("这两个数的最大公约数是%d,最小公倍数是%d",g1,g2);
return 0;
}
int gcd(int m,int n)
{
int r;
while(n!=0)
{
r = m % n;
m = n;
n = r;
}
return m;
}
int min(int m,int n,int g)
{
return m*n/g;
}
1709c-exercise-example16
参考方法:
#include<stdio.h>
int gcd(int a,int b) //求最大公约数的函数
{
int x;
while(a%b!=0)
{
x=a%b;
a=b;
b=x;
}
return b;
}
int ext(int *a,int *b) //交换算法
{
int c;
c=*a;
*a=*b;
*b=c;
return 0;
}
int main()
{
int a,b,c,min_g,max_g;
printf("请输入两个不相等的正整数:");
scanf("%d %d",&a,&b) ;
if(a<b)
ext(&a,&b);
/*{
c=a;
a=b;
b=c;
}
printf("%d %d\n",a,b);*/
min_g=gcd(a,b);
max_g=a*b/min_g;
printf("%d和%d的最大公约数为:%d\n",a,b,min_g);
printf("%d和%d的最小公倍数为:%d\n",a,b,max_g);
return 0;
}
1708c-exercise-example16
参考代码:
写的不好看,但思路还是比较清晰的,暂时也没出现bug
#include<stdio.h>
void f14(int m,int n){
int i=0;
int num=1;
int temp1=m,temp2=n;//用两个变量寄存m,n的值
int min=m<n?m:n;//求得m,n中的较小值
for(i=2;i<=min;i++){
if((m%i==0)&&(n%i==0)){
//printf("%d\n",i);
num*=i;
m=m/i;
n=n/i;
min=min/i;
i=1;//i的还原,不然在执行一次循环体后,i++=3,下次循环时,会将i=2这个商给跳过,出现问题
//printf("%d\n",min);
}
}
printf("最大公约数为:%d\n",num);
printf("最小公倍数为:%d\n",temp1*temp2/num);
}
int main(){
printf("请输入两个数:");
int m,n;
scanf(" %d %d",&m,&n);
f14(m,n);
return 0;
}
1707c-exercise-example16
参考方法:
#include<stdio.h>
int main()
{
int i, j;
int m = 0;
int s;
printf("请输入两个数字:\n");
scanf("%d %d", &i, &j);
m = i < j ? i : j;
for (s = m; s >= 1; s--) {
if (i%s == 0 && j%s == 0)
{
printf("最大公约数=%d\n",s);
printf("最小公倍数=%d\n",i*j/s);
break;
}
}
return 0;
}
1706c-exercise-example16
最大公约数参考方法:
#include<stdio.h>
int main(void)
{
int m,n,x,maxx,minx,z;
printf("输入2个正整数:");
scanf("%d%d",&m,&n);
z=m>n?n:m;
for(x=2;x<=z;x++)
if(m%x==0&&n%x==0)
maxx=x;
printf("%d\n",maxx);
minx=m*n/maxx;
printf("%d",minx);
return 0;
}
1710c-exercise-example16
参考方法:
#include<stdio.h> int gcd(int m,int n); int min(int m,int n,int g); int main(void) { int m,n,g1,g2; printf("请输入两个数字:\n"); scanf("%d%d",&m,&n); g1 = gcd(m,n); g2 = min(m,n,g1); printf("这两个数的最大公约数是%d,最小公倍数是%d",g1,g2); return 0; } int gcd(int m,int n) { int r; while(n!=0) { r = m % n; m = n; n = r; } return m; } int min(int m,int n,int g) { return m*n/g; }1709c-exercise-example16
参考方法:
#include<stdio.h> int gcd(int a,int b) //求最大公约数的函数 { int x; while(a%b!=0) { x=a%b; a=b; b=x; } return b; } int ext(int *a,int *b) //交换算法 { int c; c=*a; *a=*b; *b=c; return 0; } int main() { int a,b,c,min_g,max_g; printf("请输入两个不相等的正整数:"); scanf("%d %d",&a,&b) ; if(a<b) ext(&a,&b); /*{ c=a; a=b; b=c; } printf("%d %d\n",a,b);*/ min_g=gcd(a,b); max_g=a*b/min_g; printf("%d和%d的最大公约数为:%d\n",a,b,min_g); printf("%d和%d的最小公倍数为:%d\n",a,b,max_g); return 0; }1708c-exercise-example16
参考代码:
写的不好看,但思路还是比较清晰的,暂时也没出现bug
#include<stdio.h> void f14(int m,int n){ int i=0; int num=1; int temp1=m,temp2=n;//用两个变量寄存m,n的值 int min=m<n?m:n;//求得m,n中的较小值 for(i=2;i<=min;i++){ if((m%i==0)&&(n%i==0)){ //printf("%d\n",i); num*=i; m=m/i; n=n/i; min=min/i; i=1;//i的还原,不然在执行一次循环体后,i++=3,下次循环时,会将i=2这个商给跳过,出现问题 //printf("%d\n",min); } } printf("最大公约数为:%d\n",num); printf("最小公倍数为:%d\n",temp1*temp2/num); } int main(){ printf("请输入两个数:"); int m,n; scanf(" %d %d",&m,&n); f14(m,n); return 0; }1707c-exercise-example16
参考方法:
#include<stdio.h> int main() { int i, j; int m = 0; int s; printf("请输入两个数字:\n"); scanf("%d %d", &i, &j); m = i < j ? i : j; for (s = m; s >= 1; s--) { if (i%s == 0 && j%s == 0) { printf("最大公约数=%d\n",s); printf("最小公倍数=%d\n",i*j/s); break; } } return 0; }1706c-exercise-example16
最大公约数参考方法:
#include<stdio.h> int main(void) { int m,n,x,maxx,minx,z; printf("输入2个正整数:"); scanf("%d%d",&m,&n); z=m>n?n:m; for(x=2;x<=z;x++) if(m%x==0&&n%x==0) maxx=x; printf("%d\n",maxx); minx=m*n/maxx; printf("%d",minx); return 0; }