求两个数的最大公约数

来源:互联网 发布:顺义握奇数据怎么样 编辑:程序博客网 时间:2024/06/06 07:08

       本程序运用三种方法计算两个数的最大公约数:相减法、辗转相除法、穷举法。

     

/*文件名:求两个数最大公约数作者Smile So luck版本号2017.3.21.03运行环境visual stdio6.0程序功能:用三种方法计算出两个正整数的最大公约数*/#include<stdio.h>#include<stdlib.h>int a,b,k=1;void First();void Second();void Third();void menu();int main(){while(k){menu();}system("pause");return 0;}void First()          /*穷举法*/   {       printf("请输入两个正整数:\n");       scanf("%d%d",&a,&b);   /*从两个数a和b中的较小数开始逐个减小1,寻找能整除a和b的整数。第一个找到的整数即整数a和b的最大公约数。*/       int n=a;       if (n>b)              n=b;/*取两个数中的较小数*/    for(int i=n;i>=1;i--)       {              if (a%i==0&&b%i==0)              {                     printf("最大公约数:%d \n",i);                     break;              }       }      }void Second()  /*辗转相除法*/{int m, n; int m_cup, n_cup, res; /*被除数, 除数, 余数*/ printf("请输入两个正整数:\n"); scanf("%d %d", &m, &n); if (m > 0 && n >0) {                     /*m除以n得余数res,再把n赋值给m,res赋值给n,如此循环直到res=0,n为最大公约数*/ m_cup = m; n_cup = n; res = m_cup % n_cup; while (res != 0) { m_cup = n_cup; n_cup = res; res = m_cup % n_cup; } printf("最大公约数是: %d\n", n_cup); } else printf("Error!\n"); }void Third()    /*相减法*/{   int m, n;     printf("请输入两正个整数:");    scanf ("%d %d", &a, &b);   m=a;    n=b;                 /* a, b不相等,大数减小数,直到相等为止。*/     while (a!=b)   {    if (a>b)  a=a-b;           else  b=b-a;}   printf("最大公约数是:%d\n",a);  }    void menu()/* 界面函数*/{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)              /*用数字0到4执行以上定义函数的功能*/{                 case 1:First();break;    case 2:Second();break;    case 3:Third();break;case 4:k=0;break;default:printf("请在0-4之间选择\n");}} 

0 0
原创粉丝点击