用C语言求最大公约数

来源:互联网 发布:微信商城源码下载 编辑:程序博客网 时间:2024/06/02 10:27

/**********************************************************************************
求最大公因数
创建时间:2017.03.18
创建人:卫薇(1508010107)
主要功能:用三种方法(1:穷举法;2:辗转相除法;3:相减法)求两个数的最大公因数及最小公倍数
**********************************************************************************/

#include<stdio.h>int main(){int m,n,k,i,t,r,j;j=1;while(j==1){printf("请输入两个正整数:\n");scanf("%d,%d",&m,&n);if(m<=0||n<=0){   printf("输入数据错误,请根据提示输入!");   scanf("%d,%d",&m,&n);}else{          printf("请选择你想用的计算方法:\n");          printf("1:穷举法;2:辗转相除法;3:相减法\n");          scanf("%d",&k);}/*--------------------------------------------------------------------------1.穷举法:(1)选出m,n中最小的一个数字放到t中             (2)分别用m,n对i求余数,即看是否能被i整除             (3)直到m,n同时都能被i整除             (4)如不能整除,i-- (i的值减一) 继续从2开始执行,直到条件满足,循环结束,输出最大公约数             (5)得到满足条件的i后,用m,n乘积除以i,即为两数最大公倍数---------------------------------------------------------------------------*/         if(k=1)     {    if(m>n)    {        t=m;        m=n;        n=t;    }for(i=m;i>0;i--)if(m%i==0&&n%i==0) break;printf("最大公约数为:%d,最小公倍数为: %d \n",i,m*n/i);} /*------------------------------------------------------------------------- 2.辗转相除法:              (1)输入两个正整数m,n,判断大小              (2)求余数t:计算m除以n,将所得余数存放到变量t中;              (3)更新被除数和余数:m=n,n=t;              (4)判断余数t是否为0,若余数为零,则输出结果;否则转向第二步继续循环执行,直到条件满足,循环结束,输出最大公约数              (5)得到满足条件的n后,用输入的m,n乘积r除以最大公约数n,即为两数最大公倍数---------------------------------------------------------------------------*/else if (k=2)  {    int q;r=m*n;    if(m>n)    {        t=m;        m=n;        n=t;    }t=m%n;while(j==1){m=n;n=q;t=m%n;}printf("最大公约数为:%d,最小公倍数为: %d \n",n,r/n);}/*---------------------------------------------------------------------------3.相减法:            当m不等于n时,进入此循环            (1)若m大于n,则m=m-n             (2)若m小于n,则n=n-m             (3)若m不等于n,则再回去执行(1),直到条件满足,循环结束,输出最大公约数            (4)得到满足条件的m后,用输入的m,n乘积r除以最大公约数m,即为两数最大公倍数-----------------------------------------------------------------------------*/else   {r=m*n;while(m!=n){if(m>n) m=m-n;else n=n-m;}printf("最大公约数为:%d,最小公倍数为: %d \n",m,r/m);}printf("1 继续查询  2 退出\n");scanf("%d",&j);}return 0;}

这里写图片描述

个人总结:本次程序代码结构较为简单,简洁明了,一个主函数包含三个算法,选择想要的算法进行演算,易懂易操作,测试环节出小错误后,经与同学讨论更改最后调试成功。
虽然只是一个简单的小程序,但是经过几次作业训练之后,自己做自己调试,成就感不断上升,逐渐有了良好的程序风格,有必要的注释,大体框架构图,也算是一个进步,希望自己再接再厉!下次作业一定能更好。

0 0