求公约数的题 你能看出错在哪里吗???
include<stdio.h>int CommonFactors(int a,int b)
{
int r;
if(a<0||b<0)
return -1;
for(r=a;r>0;r--)
{
if(a%r==0 && b%r==0)
return r;
}
}
main()
{
int sub;
while((sub=CommonFactors(100,50)>0))
{
static int counter=1;
printf("common factor %d is %d\n",counter++,sub);
}
}
#include<stdio.h>
int CommonFactors(int a,int b)
{
static int r = 0;
if(a<0||b<0) return -1;
do{
++r;
if(a%r==0 && b%r==0) return r;
}while( r<=a );
}
main()
{
int sub;
while((sub=CommonFactors(100,50))>0)
{
static int counter=1;
printf("common factor %d is %d\n",counter++,sub);
}
} 逻辑太混乱了,首先你子函数里的if语句后面需要一个else,不然都输出后面for语句无论如何都会执行的。
看看我根据你的算法改写的:
#include <stdio.h>
void commonFactors(int bigNum,int smallNum) //不设置返回值,直接在子函数里打印
{
int k,i=0; //变量k用来置换两个参数和控制循环,i作为计数,统计公约数的个数
if (bigNum < 0 || smallNum < 0)
printf(" 参数错误!");//打印错误信息
else
if (bigNum < smallNum)//如果前面的数小,则置换下
{
k = smallNum;
smallNum = bigNum;
bigNum = k;
}
for (k = smallNum;k>0;k--)
{
if (smallNum % k == 0 && bigNum % k ==0)
{
i++;
printf("Common factor %d is %d. \n", i, k);
}
}
}
int main()
{
commonFactors(100,50);
return 0;
}
该程序在ubuntu下gcc编译通过。 你的函数只能返回最大公约数 仰望天上的光 发表于 2012-2-7 12:45 static/image/common/back.gif
:handshake 谢谢你 呵呵 仰望天上的光 发表于 2012-2-7 12:45 static/image/common/back.gif
可是如果是要第一次调用 返回最大公约数 以后只要再使用相同参数调用 每次返回下一个小一些的公约数 那怎么改呢{:1_1:} Cabernet 发表于 2012-2-7 14:27 static/image/common/back.gif
逻辑太混乱了,首先你子函数里的if语句后面需要一个else,不然都输出后面for语句无论如何都会执行的。
看 ...
亲 不能改动主函数哦 再试试{:1_1:} #include<stdio.h>
int CommonFactors(int a,int b)
{
static int r = 0;
if(a<0||b<0||(a-r==1)) return -1;
do{
++r;
if(a%(a-r)==0 && b%(a-r)==0) return a-r;
}while( r<a-1 );
}
main()
{
int sub;
while((sub=CommonFactors(100,50))>0)
{
static int counter=1;
printf("common factor %d is %d\n",counter++,sub);
}
} 仰望天上的光 发表于 2012-2-7 21:32 static/image/common/back.gif
:hug: 谢谢…… lz要注意编程的书写规范喔 来站坐
页:
[1]