求两个数的最大公约数

来源:互联网 发布:java课程设计题目 编辑:程序博客网 时间:2024/06/11 02:35

从键盘输入两个整数,输出两个整数的最大公约数。用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");    }}