求两个数的最大公约数的有关算法如下: (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; }
关于两个数的最大公约数的问题
最新推荐文章于 2022-12-11 21:16:20 发布