新手编写函数求两个整数的最大公约数和最小公倍数遇到的问题
/*编写函数判求两个整数的最大公约数和最小公倍数*/
#include<iostream>
int Max_Common_Divisor(int m, int n);//求最大公约数
int Min_Common_Multiple(int p, int q);//求最小公倍数
int main()
{
int a, b;
std::cout << "请输入两个整数 :\n";
std::cin >> a >> b;
std::cout<<"最大公约数是: "<<Max_Common_Divisor(a,b)<<"\n\n";
std::cout<<"最小公倍数是:"<<Min_Common_Multiple(a,b)<<"\n\n";
return 0;
}
int a[] = { 0 }, b[] = { 0 }, * pa,*pb,*pc;
int num1, num2;/*约数计数器*/
int temp1, temp2;
int temp3;/*最大公约数*/
int c[] = { 0 };/*存放公约数*/
int num3;/*数组c[]计数器*/
int Max_Common_Divisor(int m, int n)//求最大公约数
{
for(int i=1;i<=m;i++)
if (m % i == 0)
{
a = i;
num1++;
}
for (int j = 1; j <= n; j++)
if (n % j == 0)
{
b = j;
num2++;
}
pa = a;
pb = b;
if (num1 <= num2)
{
temp1 = *pa;
temp2 = *pb;
/*pa指针先不动,pb指针动*/
while (temp1 != temp2 && pa != NULL && pb != NULL)
{
pb++;
temp2 = *pb;
if (temp1 == temp2)
{
c = temp1;
num3++; /*数组c[]计数器*/
pa++;
temp1 = *pa; /*temp1=++pa也是可以的*/
}
}
}
else
{
temp1 = *pa;
temp2 = *pb;
/*pb指针先不动,pa指针先动*/
while (temp1 != temp2 && pa != NULL && pb != NULL)
{
pa++;
temp1 = *pa;
if (temp1 == temp2)
{
c = temp1;
num3++;
pb++;
temp2 = *pb;
}
}
}
/*遍历c,找最大值*/
pc= c;
temp3 = *pc;
while (pc != NULL)
{
pc++;
if (temp3 <= (*pc))
{
temp3 = *pc;
}
}
return temp3;
}
int d;/*函数Max_Commmn_Divisor的返回值*/
int factor1, factor2;/*每个数的一个因子,本数除以最大公约数*/
int Min_Common_Multiple(int p, int q)//求最小公倍数
{
d=Max_Common_Divisor(p,q);
factor1 = p / d;
factor2 = q / d;
return d * factor1 * factor2;
}
原谅新手的函数写的如此笨,还是想问一下编译时if(temp3<=(*pc))这一句 *pc引发了异常,这是为什么?怎么解决?
本帖最后由 jackz007 于 2021-1-16 20:24 编辑
#include<iostream>
int Max_Common_Divisor(int m , int n)
{
if(n) return Max_Common_Divisor(n ,m % n) ;
else return m ;
}
int Min_Common_Multiple(int p , int q)
{
return p * q / Max_Common_Divisor(p , q) ;
}
int main()
{
int a , b ;
std::cout << "请输入两个整数 : " ;
std::cin >> a >> b ;
std::cout<<"最大公约数是: "<<Max_Common_Divisor(a,b)<<"\n\n";
std::cout<<"最小公倍数是:"<<Min_Common_Multiple(a,b)<<"\n\n" ;
} 本帖最后由 jackz007 于 2021-1-16 20:28 编辑
发了一个全代码的居然被 "吞" 掉了,C ++ 代码而已,也会犯忌讳?
楼主,用递归的辗转相除法求取最大公约数,很简单,用不着那么麻烦。
int Max_Common_Divisor(int m , int n)
{
if(n) return Max_Common_Divisor(n ,m % n) ;
else return m ;
}
int Min_Common_Multiple(int p , int q)
{
return p * q / Max_Common_Divisor(p , q) ;
} 谢谢
页:
[1]