求两个正整数的最大公约数

来源:互联网 发布:ps合成图片软件 编辑:程序博客网 时间:2024/05/03 03:06
//*********求两个正整数的最大公约数问题***********//作者:高双//版本:v1.0//创建时间:2017年3月17日//主要功能://(1)辗转相除法: ① a%b得余数c  //              ② 若c=0,则b即为两数的最大公约数,结束 //               ③ 若c≠0,则a=b,b=c,再回去执行① //(2)相减法 :两整数a和b: //           ① 若a>b,则a=a-b //           ②  若a=b,则a(或b)即为两数的最大公约数,结束 //           ③若a≠b,则再回去执行① //(3)穷举法: //           ① i= a b中的小数 //           ② 若a,b能同时被i整除,则i即为最大公约数,结束 //           ③ i--,再回去执行② ////************************************#include<stdio.h>int main(){    int a,b,h=1;    int divisor1 (int a,int b);  //函数声明    int divisor2 (int a,int b);      int divisor3 (int a,int b);    int judge(int a,int b);    int x,y,z;    while(h==1)//循环    {        printf("请输入两个整数:");        scanf("%d%d",&a,&b);        if(judge(a,b)==0)//判断输入数据的正确性        {            printf("请输入正确的两个整数\n");             }        else        {            x=divisor1 ( a, b);//调用函数            y=divisor2 ( a, b);            z=divisor3 ( a, b);             printf("辗转相除法求得的最大公因数:%d\n",x);            printf("相减法求得的最大公因数:%d\n",y);            printf("穷举法求得的最大公因数:%d\n",z);            printf("1.下一组数据  2.退出\n");            scanf("%d",&h);        }    }        return 0;}//判断输入整数的正确性int judge(int a,int b){    if(a>0&&b>0) //a与b都为大于0的整数        return 1;    else        return 0;}//辗转相除法求两数的最大公约数int divisor1 (int a,int b)  {    int  temp;          //定义整型临时变量    if(a<b)             //通过比较求出两个数中的最大值和最小值    {         temp=a;        a=b;        b=temp;      }      while(b!=0)           //通过循环求两数的余数,直到余数为0    {        temp=a%b;        a=b;              //变量数值交换        b=temp;      }    return a;            //返回最大公约数到调用函数处  }  //相减法求两数的最大公约数int divisor2 (int a,int b)  {      int  temp;          //定义整型临时变量      while(a!=b)       //通过循环求两数的差,直到减数等于差    {           if(a>b)            a=a-b;        else        {            if(a<b)             //通过比较把较大数赋给a            {                   temp=a;                  a=b;                  b=temp;              }             a=a-b;        }        }    return a;                  //返回最大公约数到调用函数处  }  //穷举法求两数的最大公约数int divisor3 (int a,int b) {    int  temp;          //定义整型临时变量      if(a>b)             //通过比较求出两个数中的最大值和最小值      {           temp=a;          a=b;          b=temp;      }     for(int i=a;i>0;i--)        if(a%i==0&&a&&b%i==0)    //若a,b能同时被i整除,则i即为最大公约数            break;    return i;             //返回最大公约数到调用函数处  }
0 0
原创粉丝点击