求两个数的最大公约数

原创 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");
    }
}

相关文章推荐

求两个数的最大公约数

方法一:两个数的最大公约数一定比小的那个数还小;因此先找出两个数中小的数,从小的数开始递减遍历,直到遇到第一个满足能同时被两个数整除这个条件的数,这个数 就是最大公约数。int main() { ...

求两个数的最大公约数(C ,Python,java实现)

#include  int max(int p_a,int p_b) { if(p_b==0) return p_a; else return max(p_b,p_a%p_b); } void mai...

求两个数的最大公约数

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

求两个数的最大公约数

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

用三种方法(辗转相除法,相减法,穷举法)求两个数的最大公约数,仅供参考。

#include #include int select = 1; void division()//辗转相除法 { int a,b,c,p; printf("请输入两个整数,中间用逗号隔开:\n...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:求两个数的最大公约数
举报原因:
原因补充:

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