求两个数的最大公约数

原创 2017年06月10日 21:18:43

从键盘输入两个整数,输出两个整数的最大公约数。用C或C++语言实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.使用三种算法解决问题
3.提供友好的输入输出,并进行输入数据的正确性验证。
流程图
代码如下:

#include <stdio.h>
#include <stdlib.h>
void meau();   //菜单
void divied();  //辗转相除法求最大公约数
void minus();   //辗转相减法求最大公约数
void Gcd();   //穷举法求最大公约数
int k=1;
int main(){
    while(k)
    {
    meau();
    }
    return 0;
    system("pause");
}


/* * * * * * * *辗转相除法求最大公约数* * * * * * */
void divied()
{   
    while(1)
    {
    int x=0;
    int y=0;
    int temp=0;
    printf("请输入x,y:(使用空格键分开)\n");
    scanf("%d%d", &x, &y);
    while(x<=0||y<=0)
    {
        printf("请输入正确的数据!");
        scanf("%d%d",&x,&y);
    }
     if(y > x)
    {
         temp = x;
         x = y;
         y = temp;
     }

    while(x % y)
    {
        temp = y;
        y = x % y;
        x = temp;
    }
    printf("最大公约数为%d \n\n", y);
    }
    return 0;
}

/* * * * * * * *辗转相减法求最大公约数* * * * * * */
void minus()
{

    while(1)
    {
    int x = 0;  
    int y = 0;  
    printf("请输入x,y:\n");  
    scanf("%d %d",&x,&y); 
    while(x<=0||y<=0)
    {
        printf("请输入正确的数据!");
        scanf("%d%d",&x,&y);
    }
    while(1)  
    {  
        if(x>y)  
        {  
            x = x-y;//将两个数的差值赋给最大的一个  
        }  
        else if(x<y)  
        {  
            y = y-x;  
        }  
        else   
        {  
            printf("最大公约数为%d \n\n", y);  
            break;//跳出整个循环  
        }  
    }  
  }
    return 0;  
}  


/* * * * * * * *穷举法求最大公约数* * * * * * */
void Gcd(){  
    while(1){
     int x = 0;  
     int y = 0;  
     int i = 1;
     printf("请输入x,y:(使用空格键分开)\n");
     scanf("%d%d", &x, &y);
     while(x<=0||y<=0)
     {
        printf("请输入正确的数据!");
        scanf("%d%d",&x,&y);
     }
     if(x<y)  //确保m一定要大于n  
       {           
        x=x+y;  
        y=x-y;  
        x=x-y;  
    }  
    for(i=y;i>0;i--)  //最大公约数从大到小找到最大  
    {    
        if(x%i == 0 && y%i==0)     
             break;  
        }   
         printf("最大公约数是%d\n",i); 
    }
    return 0;
}  

/* * * * * * * 菜单* * * * * * */
void meau()
{
    int num;
    printf(" \n\n                    \n\n");
    printf("********************************************************\n\n");
    printf("*                求两个数的最大公约数                  *\n \n");
    printf("********************************************************\n\n"); 
    printf("********************* 系统功能菜单*************************       \n");
    printf("          * 1.使用辗转相除法求最大公约数    * *       \n");
    printf("          * 2.使用辗转相减法求最大公约数    * *       \n");
    printf("          * 3.使用穷举法求最大公约数        * *       \n");
    printf("          * 4. * * * * * 退出 * * * * *     * *       \n");

    printf("     ----------------------   ----------------------   \n");
    printf("请选择菜单编号:");
    scanf("%d",&num);
     switch(num)
    { 
    case 1:divied();break;
    case 2:minus();break;
    case 3:Gcd();break;
    case 4: return;
    default:printf("请在1-4之间选择\n");
    }
}

求两个数的最大公约数的三种算法

从键盘输入两个整数,求着两个整数的最大公约数。 解题思路: 从键盘输入两个数,通过以下的三个方法实现求两个数的最大公约数:     辗转相除法:取两个数中最大的数做除数,较小的数做被除...
  • only_invarably
  • only_invarably
  • 2017年03月22日 22:01
  • 14612

Java求两个数的最大公约数

辗转相除法.   当两个数都较大时,采用辗转相除法比较方便.其方法是:   以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的...
  • sdujava2011
  • sdujava2011
  • 2014年09月17日 23:04
  • 4714

如何在C++中实现求两个整数的最大公约数和最小公倍数

原帖地址:http://blog.sina.com.cn/s/blog_6ff1f2130100v3xz.html 最大公约数: 如果有一个自然数a能被自然数b整除,则称a为b的倍...
  • D_zhangzehou
  • D_zhangzehou
  • 2015年10月26日 22:13
  • 2822

VB求两个数的最大公约数和最小公倍数工具和源码

  • 2017年07月27日 11:39
  • 7KB
  • 下载

求两个数的最小公倍数和最大公约数C++源码。

  • 2008年06月29日 17:42
  • 36KB
  • 下载

求两个数的最大公约数和最小公倍数

  • 2012年08月01日 20:19
  • 1019B
  • 下载

求两个数的最大公约数

  • 2013年10月01日 16:10
  • 259B
  • 下载

求两个数的最大公约数

  • 2010年04月11日 21:56
  • 585B
  • 下载

求两个数的最小公倍数和最大公约数C++

  • 2012年05月16日 10:17
  • 781B
  • 下载

求两个数的最大公约数和最小公倍数

  • 2017年12月26日 22:01
  • 13.93MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:求两个数的最大公约数
举报原因:
原因补充:

(最多只允许输入30个字)