c++实现计算任意多个三位数的最大公约数,直到输入-999为止,调用子函数求最大公约数
最大公约数c语言编程while if
最大公约数c语言编程while if最大公约数是指两个或多个整数共有约数中最大的一个。
在C语言中,我们可以使用while和if语句来编写求最大公约数的程序。
首先,我们需要输入两个整数a和b,然后判断它们的大小关系,将较小的数赋值给变量min,较大的数赋值给变量max。
接下来,我们可以使用while循环来进行求最大公约数的操作。
在循环中,我们先判断min是否等于0,如果是,则最大公约数为max,直接输出即可。
如果min不等于0,则使用if语句判断max是否能够整除min,如果是,则最大公约数为min,直接输出即可。
如果max 不能整除min,则将max赋值为min,将min赋值为max%min,继续进行循环操作,直到min等于0为止。
下面是完整的C语言代码实现:```#include <stdio.h>int main(){int a, b, max, min, temp;printf("请输入两个整数:\n");scanf("%d%d", &a, &b);if (a > b) {max = a;min = b;} else {max = b;min = a;}while (min != 0) {if (max % min == 0) {printf("最大公约数为:%d\n", min); break;} else {temp = max;max = min;min = temp % min;}}return 0;}```在上面的代码中,我们使用了scanf函数来输入两个整数,使用if语句来判断它们的大小关系,使用while循环来进行求最大公约数的操作,使用printf函数来输出结果。
总之,使用while和if语句来编写求最大公约数的程序是比较简单的,只需要注意变量的赋值和循环条件的判断即可。
c语言求最大公约数和最小公倍数 函数调用
c语言求最大公约数和最小公倍数函数调用
以下是一个简单的 C 语言程序,使用函数调用求两个数的最大公约数和最小公倍数:
```c
include <>
// 定义求最大公约数的函数
int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
// 定义求最小公倍数的函数
int lcm(int a, int b) {
return a b / gcd(a, b);
}
int main() {
int a, b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
printf("最大公约数为:%d\n", gcd(a, b));
printf("最小公倍数为:%d\n", lcm(a, b));
return 0;
}
```
在这个程序中,我们首先定义了两个函数 `gcd` 和 `lcm`,分别用于求两个数的最大公约数和最小公倍数。
在 `gcd` 函数中,我们使用递归的方式实现了欧几里得算法,而在 `lcm` 函数中,我们使用了公式 `a b / gcd(a, b)` 来计算最小公倍数。
在 `main` 函数中,我们通过调用这两个函数来计算并输出最大公约数和最小公倍数。
c语言中最大公约数和最小公倍数的求法
c语言中最大公约数和最小公倍数的求法下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by the editor. I hope that after you download them, they can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, our shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!C语言中最大公约数和最小公倍数的求法引言在计算机编程领域,求解最大公约数和最小公倍数是一项基础而重要的任务。
最大公约数c语言编程辗转相除法
最大公约数c语言编程辗转相除法最大公约数是指两个或多个数的公共因子中最大的一个数,而辗转相除法是求解最大公约数的一种方法,也称为欧几里得算法。
在c语言编程中,可以通过以下代码实现辗转相除法求解最大公约数:```c#include <stdio.h>int main(){int a,b,c;printf("请输入两个数字:");scanf("%d %d",&a,&b);while(b != 0){c = a % b;a = b;b = c;}printf("最大公约数为:%d\n",a);return 0;}```代码中使用while循环来实现辗转相除法,不断将让a等于b,b等于a%b,直到b为0为止,此时a就是最大公约数。
例如,输入25和15,程序输出结果为5,证明代码实现正确。
此外,也可以使用递归的方法实现辗转相除法求解最大公约数:```c#include <stdio.h>int gcd(int m,int n){if(n==0){return m;}else{return gcd(n,m%n);}}int main(){int a,b,result;printf("请输入两个数字:");scanf("%d %d",&a,&b);result = gcd(a,b);printf("最大公约数为:%d\n",result);return 0;}```代码中定义了一个函数gcd,如果n为0,则返回m,否则继续递归调用gcd函数,将n作为m,m%n作为n。
例如,输入25和15,程序输出结果为5,证明代码实现也正确。
综上所述,辗转相除法是求解最大公约数的常用方法之一,在c语言编程中可以通过while循环或递归的方法实现。
最大公约数和最小公倍数c语言编程
最大公约数和最小公倍数c语言编程最大公约数和最小公倍数是数学中的基本概念,也是计算机编程中常用的算法。
在C语言编程中,可以使用循环、递归等方式实现求解最大公约数和最小公倍数的功能。
下面将从概念、算法和实现三个方面详细介绍。
一、概念1. 最大公约数最大公约数(Greatest Common Divisor,简称GCD)指两个或多个整数共有的约数中最大的一个。
例如,12和18的公约数有1、2、3、6,其中6是它们的最大公约数。
2. 最小公倍数最小公倍数(Least Common Multiple,简称LCM)指两个或多个整数共有的倍数中最小的一个。
例如,4和6的倍数有4、8、12、16、20……以及6、12、18……其中12是它们的最小公倍数。
二、算法1. 暴力枚举法暴力枚举法即遍历所有可能情况,找到满足条件的解。
对于求解两个正整数a和b的最大公约数而言,暴力枚举法就是从a和b中较小值开始递减,找到第一个同时能被a和b整除的正整数即为它们的最大公约数。
对于求解最小公倍数而言,暴力枚举法就是从a和b中较大值开始递增,找到第一个同时能整除a和b的正整数即为它们的最小公倍数。
2. 辗转相除法辗转相除法又称欧几里德算法,是一种高效的求解最大公约数的方法。
其基本思想是:假设有两个正整数a和b(a>b),令r为a除以b所得余数,若r等于0,则b即为最大公约数;否则,将b赋值给a,将r赋值给b,然后继续进行相同的操作直到r等于0为止。
3. 更相减损术更相减损术是另一种求解最大公约数的方法。
其基本思想是:假设有两个正整数a和b(a>b),每次用较大值减去较小值得到一个新的差c,再用较小值和c比较大小,重复进行这个过程直到两个数相等为止。
由于该算法每次操作都要进行多次减法运算,因此效率比辗转相除法低。
4. 质因数分解法质因数分解法是一种求解最大公约数和最小公倍数的通用方法。
其基本思想是:将两个数分别进行质因数分解,然后将它们的公共质因子相乘得到最大公约数,将它们的所有质因子相乘得到最小公倍数。
C语言求最大公约数和最小公倍数算法总结
C语言求最大公约数和最小公倍数可以说是C语言编程学习中一个重点和难点,它常常作为计算机专业学生参加各种考试必须要把握的内容。
其算法方面除常用的辗转相除法外、还可以根据数学定义法、递归调用法等。
前提:假设求任意两个整数的最大公约数和最小公倍数,采用函数调用形式进行。
1、辗转相除法辗转相除法(又名欧几里德法)C语言中用于计算两个正整数a,b的最大公约数和最小公倍数,实质它依赖于下面的定理:a b=0gcd(a,b) =gcd(b,a mod b) b!=0根据这一定理可以采用函数嵌套调用和递归调用形式进行求两个数的最大公约数和最小公倍数,现分别叙述如下:①、函数嵌套调用其算法过程为:前提:设两数为a,b设其中a 做被除数,b做除数,temp为余数1、大数放a中、小数放b中;2、求a/b的余数;3、若temp=0则b为最大公约数;4、如果temp!=0则把b的值给a、temp的值给a;5、返回第第二步;代码:int divisor (int a,int b) /*自定义函数求两数的最大公约数*/{int temp; /*定义整型变量*/if(a<b) /*通过比较求出两个数中的最大值和最小值*/{ temp=a;a=b;b=temp;} /*设置中间变量进行两数交换*/while(b!=0) /*通过循环求两数的余数,直到余数为0*/{temp=a%b;a=b; /*变量数值交换*/b=temp;}return (a); /*返回最大公约数到调用函数处*/}int multiple (int a,int b) /*自定义函数求两数的最小公倍数*/{int divisor (int a,int b); /*自定义函数返回值类型*/int temp;temp=divisor(a,b); /*再次调用自定义函数,求出最大公约数*/return (a*b/temp); /*返回最小公倍数到主调函数处进行输出*/}#include "stdio.h" /*输入输出类头文件*/main(){int m,n,t1,t2; /*定义整型变量*/printf("please input two integer number:"); /*提示输入两个整数*/scanf("%d%d",&m,&n); /*通过终端输入两个数*/t1=divisor(m,n); /*自定义主调函数*/t2=multiple(m,n); /*自定义主调函数*/printf("The higest common divisor is %d\n",t1);/*输出最大公约数*/printf("The lowest common multiple is %d\n", t2); /*输出最小公倍数*/}启示:请注意算法中变量数值之间的相互交换方法、如何取模、怎样进行自定义函数及主调函数与被调函数间的相互关系,函数参数的定义及对应关系特点,利用控制语句如何实现。
c语言求最大公约数和最小公倍数函数调用
C语言求最大公约数和最小公倍数函数调用在C语言编程中,求最大公约数和最小公倍数是一种常见的需求。
在实际开发中,我们经常需要编写函数来计算给定两个数的最大公约数和最小公倍数。
本文将介绍如何在C语言中实现这两个函数的调用,并探讨其原理和实现方法。
1. 最大公约数最大公约数,又称最大公因数,指两个或多个整数公有的约数中最大的一个。
在C语言中,我们可以通过欧几里德算法来求两个数的最大公约数。
欧几里德算法的原理是通过不断取余的方式,直到余数为0,即可得到最大公约数。
下面是在C语言中实现求最大公约数的函数:```cint gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}```在这个函数中,我们使用递归的方式来实现欧几里德算法。
首先判断b是否为0,如果是,则a就是最大公约数;如果不是,则递归调用gcd函数,直到b为0。
2. 最小公倍数最小公倍数指几个自然数公有的倍数中最小的一个。
在C语言中,我们可以通过最大公约数来求解最小公倍数。
最小公倍数等于两数的乘积除以它们的最大公约数。
下面是在C语言中实现求最小公倍数的函数:```cint lcm(int a, int b) {return a * b / gcd(a, b);}```在这个函数中,我们调用了前面定义的gcd函数,通过两个数的乘积除以它们的最大公约数来求得最小公倍数。
3. 函数调用在实际应用中,我们可以通过直接调用这两个函数来求解给定的两个数的最大公约数和最小公倍数。
以下是一个示例:```c#include <stdio.h>int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("它们的最大公约数是:%d\n", gcd(num1, num2));printf("它们的最小公倍数是:%d\n", lcm(num1, num2));return 0;}```在这个示例中,我们首先输入两个整数,然后调用gcd和lcm函数来求解它们的最大公约数和最小公倍数,最后将结果输出到控制台。
最大公约数c语言
最大公约数c语言最大公约数是数学中的一个概念,它是指两个或多个整数共同的约数中最大的一个。
最大公约数也可以用来计算两个或多个数之间的最小公倍数。
最大公约数在很多领域都有重要的应用,比如在几何中,最大公约数可以用来表示两个要素之间的最大相关性;在代数中,最大公约数可以用来分解多项式;在统计学中,最大公约数可以用来计算样本数据之间的最大共性等等。
计算最大公约数一般有两种方法,一种方法是使用辗转相除法,另一种方法是使用穷举法。
而在c语言中,两者都可以实现。
首先,我们以辗转相除法为例,介绍如何在c语言中实现最大公约数。
辗转相除法是求最大公约数的一种常用方法,它的原理是:用较大的数除以较小的数,再用除数除以余数,直到余数为0时,所得的最后一个除数即为这两个数的最大公约数。
在c语言中,想要实现辗转相除法,可以使用while 循环,依次将较小的数作为除数,较大的数作为被除数,然后求出余数,把余数作为新的被除数,重复上述步骤,当余数为0时,所得的最后一个除数即为最大公约数。
下面是c语言求最大公约数的辗转相除法程序:int gcd(int x, int y) //gcd (x,y) 代表求x,y 的最大公约数 { int temp; if (x < y) { temp = x; x = y; y = temp; } while (y != 0) { temp = x % y; x = y; y = temp; }return x; }其次,我们来介绍穷举法在c语言中如何实现最大公约数的计算。
穷举法是求最大公约数的一种常用方法,它的原理是:从1开始,逐个判断两个数能否同时被整除,直到找到最大的一个可以被两个数同时整除的数,即为最大公约数。
在c语言中,想要实现穷举法,可以使用for循环,从1开始,逐个判断两个数能否被整除,如果可以,则把当前的数作为最大公约数,如果不可以,则把当前的数加1,重复上述步骤,直到可以被两个数同时整除的数,即为最大公约数。
C语言实现求最大公约数的三种方法
C语⾔实现求最⼤公约数的三种⽅法⽬录题⽬描述问题分析代码实现⽅法⼀:穷举法⽅法⼆:辗转相除法⽅法三:更相减损法题⽬描述求任意两个正整数的最⼤公约数问题分析最⼤公因数,也称最⼤公约数、最⼤公因⼦,指两个或多个整数共有约数中最⼤的⼀个。
a,b的最⼤公约数记为(a,b),同样的,a,b,c的最⼤公约数记为(a,b,c),多个整数的最⼤公约数也有同样的记号。
求最⼤公约数有多种⽅法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。
与最⼤公约数相对应的概念是最⼩公倍数,a,b的最⼩公倍数记为[a,b]。
——百度百科最⼤公因数的求法有不少,本⽂我将采⽤穷举法、辗转相除法、更相减损法三种⽅法,求两个正整数的最⼤公约数(最⼤公因数)。
代码实现⽅法⼀:穷举法穷举法(列举法),是最简单最直观的⼀种⽅法。
具体步骤为:先求出两个数的最⼩值min(最⼤公约数⼀定⼩于等于两个数的最⼩值),接着从最⼩值min递减遍历(循环结束条件为i > 0),如果遇到⼀个数同时为这两个整数的因数,则使⽤break退出遍历(退出循环),这时的遍历值i即为两个正整数的最⼤公约数。
123 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23#include <stdio.h>/*** @brief 获取两个正整数的最⼤公因数(穷举法) * @param num1 第⼀个正整数* @param num2 第⼆个正整数* @return 最⼤公因数*/int Get_Max_Comm_Divisor(int num1, int num2) {int i = 0;//获取两个整数的最⼩值int min = num1 < num2 ? num1 : num2;//从两个数的最⼩值开始递减遍历for(i = min; i > 0; i--){//i为num1和num2的公倍数if(num1 % i == 0 && num2 % i == 0)break;}return i;}2425262728293031int main(){int num1 = 0, num2 = 0;puts("请输⼊两个正整数.");scanf("%d%d", &num1, &num2); printf("最⼤公约数为%d.\n", Get_Max_Comm_Divisor(num1, num2)); return 0;}运⾏结果⽅法⼆:辗转相除法辗转相除法⼜称欧⼏⾥得算法,是指⽤于计算两个⾮负整数a ,b 的最⼤公约数。
c++实现计算任意多个三位数的最大公约数,直到输入-999为止,调用子函数求最大公约数
cout<<"Sorry,程序异常,请尝试重新运行!"<<endl;
}
else
{
memset(szNotice,0,sizeof(szNotice));
sprintf(szNotice,"最大公约数为:%d",ret);
cout<<szNotice<<endl;
}
}
else
{
cout<<"无有效数据,请安任意键退出!"<<endl;
cout<<"请输入“999”计算或退出!"<<endl;
cout<<szNotice<<endl;
cout<<"Num = ";
cin>>buffer;
GetStingTrim(&buffer);
isNum = IsAllNum(buffer.c_str());
}
}
if(isNum&&strcmp(buffer.c_str(),SYSOUT) != 0)
}
cout<<"Min = "<<nMin<<endl;
cout<<"Max = "<<nMax<<endl;
//-----------------------------------------------------------------------------------------
//程序结束清除缓存
c++程序编写求三个数的最大值和最小值,c++函数应用
c++程序编写求三个数的最⼤值和最⼩值,c++函数应⽤实验六函数及其使⽤1 学时4学时2 实验⽬的与要求学习函数的编写。
理解数学中的函数、⾃变量、函数在某⼀点的取值与 C++中的⾃定义函数、函数参数、函数调⽤及其返回值之间的联系,掌握 C++对数学函数功能的实现⽅式。
3 实验环境WINDOWS XP 或WINDOWS SERVER 2000Microsoft Visual C++ 6.04 准备⼯作安装好Microsoft Visual C++6.05 实验内容(⼀).输⼊三个数,编写⼀个程序求这三个数的最⼤值和最⼩值。
要求把求最⼤值和最⼩值编写成函数。
#includedouble max(double a,double b,double c);double min(double a,double b,double c);int main (){int a,b,c;cout <<"请输⼊三个数: " <cin >>a;cin >>b;cin >>c;cout <<"最⼤数的为: " <cout <<"最⼩的数为: " <return 0;}double max(double a,double b,double c){if (a>b && a>c) return a;if (b>a && b>c) return b;return c;}double min(double a,double b,double c){if (aif (breturn c;}(⼆)编制如下⾃定义函数,实现指定功能。
(1)编⽆参函数,void print(),负责在屏幕的同⼀⾏上连续显⽰ 20 个“-”符号。
(2)编⼀参函数,double f(double x),计算 x2 + x + 1 并返回结果。
n个数的最大公约数 c语言
n个数的最大公约数 c语言当需要使用 C 语言计算`n`个数的最大公约数时,可以使用递归算法来实现。
以下是一个示例代码:```c#include <stdio.h>#include <math.h>// 辗转相除法int gys(int x, int y){int a;if (x < y){// 将大的数排在前面a = x;x = y;y = a;}while (x % y != 0){// 一直循环直到 y 是 x 的因数a = x % y;x = y;// 不断取除数作为 xy = a;}// 当 y 是 x 的因数时,y 就是最大公因数return y;}int gbs(int x, int y){int result = (x * y) / (gys(x, y));return result;}int main(){int t;scanf("%d", &t);int i, x, y;scanf("%d", &x);int gys1 = x, gbs1 = x;for (i = 1; i < t; i++){scanf("%d", &y);gys1 = gys(gys1, y);gbs1 = gbs(gbs1, y);printf("最大公约数和最小公倍数为:");printf("%d %d", gys1, gbs1);}}```在上述代码中,`gys()`函数使用辗转相除法计算两个数的最大公约数,而`gbs()`函数则根据最大公约数计算两个数的最小公倍数。
在`main()`函数中,通过一个循环来读取输入的数,并调用`gys()`和`gbs()`函数计算最大公约数和最小公倍数。
你可以根据自己的需求对代码进行修改和扩展,以满足特定的要求。
c语言循环结构求最大公约数
c语言循环结构求最大公约数本文将围绕“C语言循环结构求最大公约数”这一主题展开,详细讲解算法的实现思路和具体步骤。
最大公约数(Greatest Common Divisor,简称GCD)是指能够同时整除给定两个数的最大正整数。
在算法实现中,我们将使用C语言的循环结构来解决这个问题。
首先,我们需要了解两个数的最大公约数是如何计算的。
假设给定两个数分别为a和b,其中a > b。
根据欧几里得算法,最大公约数可以通过不断地使用辗转相除法来计算得出。
具体操作如下:1. 首先,使用除法计算a除以b的商和余数,即a ÷b = q1 …r1。
这里的商q1是整数部分,余数r1是小于b的非负整数。
2. 接下来,我们将b替换为原来的a,并将r1替换为原来的b,即a = b,b = r1。
3. 进行第二次除法运算,计算b除以r1的商和余数,即b ÷r1 = q2 (2)4. 重复执行上述步骤,不断用新的b替换原来的r1,并进行除法运算,直到余数为0。
此时,除数b就是最大公约数。
有了上述算法的思路,接下来我们将使用C语言的循环结构来实现。
首先,我们需要声明两个整数变量a和b,分别用来存储给定的两个数。
然后,使用scanf函数从用户处获取这两个数的值。
c#include <stdio.h>int main() {int a, b;printf("请输入两个整数:\n");scanf("dd", &a, &b);在这里实现最大公约数的计算return 0;}接下来,我们在循环结构中实现上述算法的具体步骤。
循环的终止条件是余数r为0。
cint r; 存储余数while (r != 0) {r = a b;a = b;b = r;}为了保证能够正确计算出最大公约数,我们在进入循环之前对a和b进行一些处理。
首先,我们需要将a和b的绝对值进行保存,以防止其为负数。
c语言求最大公约数算法 -回复
c语言求最大公约数算法-回复如何在C语言中求最大公约数算法引言:在数学中,最大公约数(Greatest Common Divisor,简称为GCD)是指能够同时整除多个给定整数的最大正整数。
求最大公约数是数论中一个十分基础而重要的问题,它在实际应用中有着广泛的应用。
本文将介绍如何在C语言中实现最大公约数算法,旨在帮助读者更好地理解求最大公约数的思路和方法。
一、欧几里得算法(辗转相除法)欧几里得算法是求最大公约数最常用的一种方法,其基本思想是通过反复用较小数除较大数,直到较大数变为0为止,此时较小数即为最大公约数。
下面是C语言中求最大公约数的欧几里得算法实现:c#include <stdio.h>int gcd(int a, int b){if(b == 0)return a;elsereturn gcd(b, a b);}int main(){int a, b;printf("请输入两个正整数:");scanf("d d", &a, &b);printf("最大公约数为:d\n", gcd(a, b));return 0;}在上面的代码中,我们使用递归的方式实现了最大公约数的求解。
首先根据欧几里得算法的定义,较大的数除以较小的数,如果余数为0,则较小的数即为最大公约数;否则,将较小的数作为新的被除数,余数作为新的除数,进行下一轮的递归计算。
二、穷举法除了欧几里得算法,还可以使用穷举法来求最大公约数。
穷举法即遍历所有可能的数值,找出输入数中同时能整除的最大正整数。
算法具体实现如下:c#include <stdio.h>int gcd(int a, int b){int i, gcd;for(i = 1; i <= a && i <= b; ++i){if(a i == 0 && b i == 0)gcd = i;}return gcd;}int main(){int a, b;printf("请输入两个正整数:");scanf("d d", &a, &b);printf("最大公约数为:d\n", gcd(a, b));return 0;}在上面的代码中,我们使用了一个循环来遍历1到较小的输入数之间的所有数值,通过判断同时能被两个输入数整除的数值,找出其中的最大值作为最大公约数。
c语言求最大公约数和最小公倍数(转)
c语⾔求最⼤公约数和最⼩公倍数(转)最⼤公约数与最⼩公倍数的求解是很多初学C的⼈所⾯临的⼀道问题。
当然这道问题并不难解答,也有很多⼈已经写过相关的博客,我在此书写此篇博客,⼀是为了让⾃⼰能够夯实基础,另外就是希望能够帮到和我⼀样的初学者。
当然,在写这篇博客之前,我已经做过相关资料的调查,可能读者会发现此篇博客会与其他⼈的博客有所重复,但是,我保证绝未抄袭。
好了,进⼊正题!问题:请从键盘上输⼊两个数值 x,y,请⽤C语⾔求出这两个数值的最⼤公约数与最⼩公倍数。
⾸先,我们要想解决这道问题,就要了解什么是最⼤公约数与最⼩公倍数。
最⼤公因数;也称最⼤、最⼤公,指两个或多个共有中最⼤的⼀个。
----来源百度百科最⼩公倍数:两个或多个公有的倍数叫做它们的公倍数。
----来源百度百科了解了其含义,接下来就是构思算法,通常⽽⾔,求解最⼤公约数有三种算法,⽽最⼩公倍数的求解,我们可以很容易的推断出,最⼩公倍数等于两个数值的乘积除以这两个数值的最⼤公约数。
那么接下来的算法我将在此⼀⼀进⾏列举和解释。
1.辗转相除法:⼜名(Euclidean algorithm),它是已知最古⽼的算法,其可追溯⾄公元前300年前。
----来源百度百科辗转:望⽂⽣义,就是翻来覆去。
相除就很好理解了,就是进⾏除法运算。
辗转相除法的核⼼就是不断的让两个数做除法运算。
其原理基于两个整数的最⼤公约数等于其中较⼩的数和两数的相除余数的最⼤公约数。
假设两数为 x,y。
先令 z = x % y ;之后 y 赋给 x 即令 x = y ;再将 z 赋给 y 即令 y = z;辗转相减,其终⽌条件为:y 等于0时。
代码如下:[csharp]1. #include<stdio.h>2. int main()3. {4. int x, y, z, m, n;5. printf("请输⼊两个数:");6. scanf_s("%d%d", &x, &y);7. m = x, n = y;8. while (y != 0)9. {10. z = x%y;11. x = y;12. y = z;13. }14. printf("最⼤公约数是: %d\n", x);15. printf("最⼩公倍数是: %d\n", m*n / x);16. system("pause");17. return 0;18. }2.辗转相减法:即,其特⾊是做⼀系列减法,从⽽求得。
如何用c语言求最大公约数和最小公倍数
输入两个正整数m和n, 求其最大公约数和最小公倍数.<1> 用辗转相除法求最大公约数算法描述:m对n求余为a, 若a不等于0则m <- n, n <- a, 继续求余否则n 为最大公约数<2> 最小公倍数= 两个数的积/ 最大公约数#includeint main(){int m, n;int m_cup, n_cup, res; /*被除数, 除数, 余数*/printf("Enter two integer:\n");scanf("%d %d", &m, &n);if (m > 0 && n >0){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("Greatest common divisor: %d\n", n_cup);printf("Lease common multiple : %d\n", m * n / n_cup);}else printf("Error!\n");return 0;}★关于辗转相除法, 搜了一下, 在我国古代的《九章算术》中就有记载,现摘录如下:约分术曰:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。
以等数约之。
”其中所说的“等数”,就是最大公约数。
求“等数”的办法是“更相减损”法,实际上就是辗转相除法。
辗转相除法求最大公约数,是一种比较好的方法,比较快。
对于52317和75569两个数,你能迅速地求出它们的最大公约数吗?一般来说你会找一找公共的使因子,这题可麻烦了,不好找,质因子大。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cout<<"开始执行计算"<<endl;
set<int> *pSetNum = NULL;//地址赋值
pSetNum = &setNum;
ret = GetMaxDivissor(pSetNum,nMin);
if(SYSFAILED == ret)
char szNum[4] = {0};
set<int> setNum;//用户输入数据数组
string buffer;
int nMax = 0;//用户输入最大数
int nMin = 0;//用户输入最小数
bool isNum = false;//是否为数字
int count = 0;//记录用户输入数据量
const int SYSFAILED = -1;//系统错误码
const int SYSNUMLENGTH = 3;//输入的数据长度限制
#endif
//判断用户输入字符是否为数字
bool IsAllNum(const char* resStr);
//计算最大公约数
int GetMaxDivissor(set<int> *pSetNum,int nMin);
{
if(!isdigit(buffer[i]))
{
ret = false;
break;
}
if(i>SYSNUMLENGTH+1)
{
ret = false;
break;
}
}
return ret;
}
int GetMaxDivissor(set<int> *pSetNum,int nM过程量
}
return nMaxDivissor;
}
void GetStingTrim(string *pStr)
{
if(NULL == pStr)
return;
pStr->erase(0,pStr->find_first_not_of("0"));
}
#pragma warning(disable:4786)
#include<iostream>
#include<stdlib.h>
#include<string>
#include<set>
using namespace std;
#ifndef SYSOUT
const char *SYSOUT = "999";//退出标示
cout<<"请输入“999”计算或退出!"<<endl;
cout<<szNotice<<endl;
cout<<"Num = ";
cin>>buffer;
GetStingTrim(&buffer);
isNum = IsAllNum(buffer.c_str());
}
}
if(isNum&&strcmp(buffer.c_str(),SYSOUT) != 0)
GetStingTrim(&buffer);
isNum = IsAllNum(buffer.c_str());
if(!isNum||buffer.size() != SYSNUMLENGTH)
{
while(!isNum||buffer.size() != SYSNUMLENGTH)
{
//用户无输入
buffer = "";
{
buffer = "";
memset(szNotice,0,sizeof(szNotice));
sprintf(szNotice,"Please Enter Your %dNum:",count+1);
cout<<szNotice<<endl;
cout<<"Num = ";
cin>>buffer;
//该函数去除输入前端“0”
void GetStingTrim(string *pStr);
int main()
{
//-----------------------------------------------------------------------------------------
//程序变量
{
cout<<"Sorry,程序异常,请尝试重新运行!"<<endl;
}
else
{
memset(szNotice,0,sizeof(szNotice));
sprintf(szNotice,"最大公约数为:%d",ret);
cout<<szNotice<<endl;
}
}
else
{
cout<<"无有效数据,请安任意键退出!"<<endl;
int nTmp = 0;//用于存储临时数据
char szNotice[100] = {0};
//-----------------------------------------------------------------------------------------
//用户输入控制
while(strcmp(buffer.c_str(),SYSOUT) != 0)
{
nTmp = atoi(buffer.c_str());
if(count == 0)
{
nMin = nMax = nTmp;//作为第一次有效数据初始化
}
else
{
//选择最大最小数
nMin = nMin>nTmp?nTmp:nMin;
nMax = nMax<nTmp?nTmp:nMin;
}
setNum.insert(nTmp);
setNum.clear();
//-----------------------------------------------------------------------------------------
system("pause");
return 0;
}
bool IsAllNum(const char* resStr)
}
cout<<"Min = "<<nMin<<endl;
cout<<"Max = "<<nMax<<endl;
//-----------------------------------------------------------------------------------------
//程序结束清除缓存
{
bool ret = true;
if(NULL == resStr||strlen(resStr)>=4)
{
return false;
}
char buffer[SYSNUMLENGTH+1] = {0};
strcpy(buffer,resStr);
int i = 0;
for(i;buffer[i] != '\0';i++)
}
count++;
}
//-----------------------------------------------------------------------------------------
//有效数据检查
if(setNum.size()!=0)//有效数据不为0时则调用计算模块
{
int ret = 0;
{
nSame = 0;
it = pSetNum->begin();
for(it;it != pSetNum->end();it++)
{
if((*it)%nTmpNum == 0)
nSame++;
else
break;
}
if(nSize == nSame)
nMaxDivissor = nTmpNum;
nTmpNum++;
if(!pSetNum)
{
return SYSFAILED;
}
int nMaxDivissor = 1;
int nSize = pSetNum->size();
int nSame = 0;//用于记录可被整除数据量
set<int>::iterator it;
while(nTmpNum < nMin+1) //nMin+1为了防止最小输入数据不能参与公约数整除