关于两个数的最大公约数的问题
来源:互联网 发布:算法设计 编辑:程序博客网 时间: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