最大公约数怎么计算啊

给两组数字,每组有四个数字,分别找出每一组数字中最大的那个,然后输出它们的最大公约数。 输入两行,每行四个非负整数。保证每个非负整数的最大值不超过 int 类型的范围。 输出一行,一个数,表示最大公约数。
输入样例
1 2 3 4
5 6 7 8
这样的题要怎么计算啊?

这个题你可以以这个流程做:
第一步获得最大值
循环输入,“打擂台”比较获得

#include<bits/stdc++.h>
using namespace std;
int getGCD(int x,int z) {    //递归函数获取公约数(辗转相除法) 
  int h=x%z;                //余数定义 
  if(h==0)return z;            //停止条件 
  else getGCD(z,h);            //继续递归 
}
int main () {
    int x,a1=-1,a2=-1;        //打擂台比较,a1和a2是两个最大值
    for(int i=1;i<=4;i++) {
        cin>>x;
        a1=max(a1,x);
    }
    for(int i=1;i<=4;i++) {
        cin>>x;
        a2=max(a2,x);
    }
    cout<<getGCD(a1,a2);
    return 0;
}

第二部获得最大公约数
使用辗转相除法(也被称作欧几里得方法)

辗转相除法
更相相减法

/************begin************/
#include"stdio.h"
#include"math.h"
//判断,如果m<n则交换m,n
void judgeAndSwap(int* m,int *n){
    int temp;
    if(*m<*n){
        temp=*m;
        *m=*n;
        *n=temp;
    }        
}
//求最大公约数
int main()
{
    int m,n;//定义两个变量 m,n。  此行代码不可修改!!!
    int y1,y2;
    printf("Enter two numbers:");
    scanf("%d,%d",&m,&n);//接收输入的数值m,n。  此行代码不可修改!!!
    if(m<=0||n<=0)
    {
        printf("Nonpositive value not allowed\n");
        return 0;
    }
    //网上求最大公约数的算法有好几种,这里我采用了效率较高的更相减损术
    while(1)
        {    
            judgeAndSwap(&m,&n);//比较m,n大小,如果m>n,则交换,保证减数n为较小数
            y1=m-n;
            judgeAndSwap(&y1,&n);//比较y1和n大小,如果y1>n,则交换 保证减数n为较小数
            y2=y1-n;
            m=y2;//n中保存始终是较小的减数,不用再次赋值
            if((y2-y1)==0)//相邻俩数更相 相减,当结果为0时,该数为最大公约数
            {    
                printf("the greatest common divistr is:%d\n",y2);
                break;
            }    
        }    
}
/*************end*************/

最简单的就是用循环,让计算机自己去一个一个试,也可以用下面两个答主的方法,辗转相除。