-3
#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;

}
4

2 回答 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 回答