实现函数int CommonFactors(int a,int b),计算a,b的所有公约数。第一次调用,返回最大公约数,以后只要使用相同参数调用,每次返回下一个小一些的公约数。无公约数返回-1。以下是我的源代码:
/*
函数功能:计算两个正整数的最大公约数
函数入口参数:两个正整数
函数返回值:两个正整数的最大公约数
*/
int MaxCommonFactor(int x, int y)
{
while(x != y)
{
if(x > y)
{ x = x - y; }
else
{ y = y - x; }
}
return x;
}
/*
函数功能:计算两个整数的所有公约数
函数入口参数:两个整数
函数返回值:第一次返回最大公约数,以后返回下一个小一些的公约数;无公约数是返回-1
*/
int CommonFactor(int h, int k)
{
int b;
int i; //定义循环变量
b = MaxCommonFactor(h, k); //存放最大公约数的变量
for(i=b; i>0; i--)
{
if(h%i == k%i)
{
return i;
}
}
return -1;
}
/*主函数*/
void main()
{
int a;
a = CommonFactor(100, 50);
printf("CommonFactor = %d\n",a); //按题目意思,这里应该打印50
a = CommonFactor(100, 50);
printf("CommonFactor = %d\n",a); //按题目意思,这里应该打印25
}
具体的理解是这样的:在一次执行内,这个函数被调用了多次,但是每次打印的结果不同。比如,求100和50的公约数,题目的要求是:第一次调用打印出50,第二次调用打印出25,第三次调用打印出10,第四次调用打印出2,第五次调用打印出1;但是你可以只是调用两次,打印出50和25,而不是一次调用就把全部公约数全部的打印完。
我的疑问是:我不能实现第二次打印25,第二次和以后的调用都是输出50,请高手帮忙修改一下程序,最好也有详细的解释。谢谢!!这题目搞了我一个下午,我初学,奔泪。。。
主要是int CommonFactor(int h, int k)的实现,int MaxCommonFactor(int x, int y)是没有问题的吧。另外,希望不要用到数组,指针,结构体。
ibeautiful