程序设计作业之求最大公约数不同算法的时间性能比较
一、题目分析:
因为老师已经给出了四种不同的算法程序,所以该题主要是对不同的算法理解调用并对各算法使用时间进行比较,比较各算法的性能。
二、算法代码
1、辗转相除法
//函数嵌套调用
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); /*返回最小公倍数到主调函数处进行输出*/
}
//函数递归调用
int gcd(int a, int b)
{
if (a%b == 0)
return b;
else
return gcd(b, a%b);
}
2、穷举法
int divisor1(int a, int b) /*自定义函数求两数的最大公约数*/
{
int temp; /*定义义整型变量*/
temp = (a > b) ? b : a; /*采种条件运算表达式求出两个数中的最小值*/
while (temp > 0)
{
if (a%temp == 0 && b%temp == 0) /*只要找到一个数能同时被a,b所整除,则中止循环*/
break;
temp--; /*如不满足if条件则变量自减,直到能被a,b所整除*/
}
return (temp); /*返回满足条件的数到主调函数处*/
}
int multiple1(int a, int b) //求最大公倍数
{
int p, q, temp;
p = (a > b) ? a : b; /*求两个数中的最大值*/
q &#