#include <stdio.h>
int gcd(int a, int b);
int lcm(int x ,int y);
int main()
{
int num1, num2, k, hcf,max,n;
scanf("%d",n);
for (k=0;k<n;k++)
{
scanf("%d %d", &num1, &num2);
hcf=gcd(num1,num2);
max=lcm(num1,num2);
printf("%d %d\n", hcf,max);
}
return 0;
}
int gcd(int a, int b)
{
int i,f;
for(i=1;i<=a || i<=b; i++)
if (a%i==0 && b%i==0)
f=i;
return f;
}
int lcm(int x ,int y)
{
int m;
m=(x>y) ? x : y;
while(1)
{
if(m%x==0 && m%y==0)
{
return m;
break;
}
++m;
}
return x,y;
}
2 回答
2
scanf("%d",n);
^ & missing
您需要这里的地址n
,正如%d
预期的 int 地址。在那里添加&
-
scanf("%d",&n);
和这个 -
return x,y;
我不知道您从中理解(或期望)什么,但只会返回y
。
于 2015-09-19T07:55:06.970 回答
0
问题已经回答,是的,
scanf( "%d" , &n );
然而,下面是特定于上述程序的替代方案。
int main() {
int num1, num2, k, hcf,max,n;
//scanf("%d",n);
scanf("%d",&n);
for (k=0;k<n;k++) {
scanf("%d %d", &num1, &num2);
hcf=gcd(num1,num2);
//max=lcm(num1,num2);
// LCM = ( n1, n2 )/ GCD will work in your case
max = ( num1 * num2 ) / hcf ;
printf("%d %d\n", hcf,max);
}
return 0;
}
int gcd(int a, int b) {
int i,f;
for(i=1;i<=a || i<=b; i++) {
if (a%i==0 && b%i==0) {
f=i;
}
}
return f;
}
于 2015-09-19T08:30:14.243 回答