c语言问题 求n个数最大公约数

发布网友

我来回答

1个回答

热心网友

#include<stdio.h>
 main(void)
{ int a[9],n,t,i,temp1,temp2,c,d;
  printf("请输入您所要输入的数字个数(须在2-9之间)\n");
  scanf("%d",&n);
  for(i=0; i<n; i++)
  { scanf("%d",&a[i]);
  }
  if(a[0]<a[1])
  { temp1=a[0];
    a[0]=a[1];
    a[1]=temp1;
  }
  while(a[0]%a[1]!=0)
  { c=a[0];
    a[0]=a[1];
    a[1]=c%a[1];
  }
  a[0]=a[1];
  for(i=0; i<n; i++)
  { if(a[0]<a[i])
    { temp2=a[0];
      a[0]=a[i];
      a[i]=temp2;
    }
    while(a[0]%a[i]!=0)
    { d=a[0];
      a[0]=a[i];
      a[i]=d%a[i];
    }
    a[0]=a[i];
  }
  printf("您所输入的数字最大公约数为%d",a[0]);

}

追问的确是这样。。。为什么要要这句a[0]=a[i]? 绕晕了。。

追答

因为所求出的二个数的最大公约数,是在a[i],而不是a[0]。

其实这个程序可以大大简化;


#include<stdio.h>
 main(void)
{ int a[9],n,i,d;
  printf("请输入您所要输入的数字个数(须在2-9之间)\n");
  scanf("%d",&n);
  for(i=0; i<n; i++)
  { scanf("%d",&a[i]);
  }
  for(i=1; i<n; i++)
  { while(a[i]%a[0]!=0)
    { d=a[i];
      a[i]=a[0];
      a[0]=d%a[0];
    }
  }
  printf("您所输入的数字最大公约数为%d",a[0]);

}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com