关于两个数的最大公约数的问题

来源:互联网 发布:算法设计 编辑:程序博客网 时间:2024/05/18 17:40
求两个数的最大公约数的有关算法如下:(1)辗转相除法两整数a和b:① a%b得余数c② 若c=0,则b即为两数的最大公约数,结束③ 若c≠0,则a=b,b=c,再回去执行①(2)相减法两整数a和b:① 若a>b,则a=a-b② 若a<b,则b=b-a③ 若a=b,则a(或b)即为两数的最大公约数,结束④ 若a≠b,则再回去执行①(3)穷举法:① i= a b中的小数② 若a,b能同时被i整除,则i即为最大公约数,结束③ i--,再回去执行②#include<stdio.h>#include<stdlib.h>int select=1;//辗转相除法求最大公约数void gcd1()      {      int m, n, a, b, c;     printf("请输入两个整数并用空格隔开:\n");   scanf("%d%d",&a,&b);   m=a;n=b;   while(b!=0)  //余数不为0,继续相除,直到余数为0      {   c=a%b;a=b;b=c;   }   printf("辗转相除法求最大公约数=%d\n",a);}//相减法求最大公约数  void gcd2(){int a,b;    printf("请输入两个整数a和b并用空格隔开:\n");    scanf("%d%d",&a,&b);while(a!=b)    {        if ( a>b )            a-=b;        else            b-=a;    }printf("相减法求最大公约数=%d\n",a);    }//穷举法求最大公约数 void gcd3()   {      int a,b,c,p,i;printf("请输入两个整数a和b并用空格隔开:\n");scanf("%d%d",&a,&b);for(i=1;i<a+1;i++)if(a%i==0 && b%i==0){p=i;}printf("穷举法求最大公约数为%d\n",p);}//菜单界面void menu(){int num;printf("      ******************求最大公约数***********************\n");printf("      *---------------------   ----------------------     *\n");printf("      *   *********************************************   *\n");printf("      *   * 1.辗转相除法 * *   2.相减法         **        *\n");printf("      *   *********************************************   *\n"); printf("      *    * 3.穷举法    * *       0.退出程序   **        *\n");printf("      *              请从1-3中选择方法                    *\n");printf("      *****************************************************\n");scanf("%d",&num);switch(num){case 1:gcd1();break;                                 case 2: gcd2();break;case 3: gcd3();break;case 0:select=0;break;}}//循环操作int main(){ while(select){menu();}system("pause");return 0;}



0 0
原创粉丝点击