我写的“求最大公约数和最小公倍数“,拿出来晾晾,高手指点.............
#include <stdio.h>int get_gy_gb(int num1, int num2) {
int i, min, result = 0;
min = (num1 > num2) ? num2 : num1; //Get the min num of the two.
for (i = 1; i <= min; i++) {
if (num1 % i == 0 && num2 % i == 0) {
result = (result >= i) ? result : i; //Get the max common divisor.
}
}
return result;
}
int main(void) {
int n1, n2, result;
printf("Please input two numbers: \n");
scanf("%d%d", &n1, &n2);
result = get_gy_gb(n1, n2);
printf("The max common divisor is : %d \n", result);
printf("The min common multiple is : %d \n", (n1 * n2) / result);
return 0;
}
有什么不足请高手们不吝赐教,谢谢!!!!!!!!!!!!
[[it] 本帖最后由 mqh21364 于 2008-3-12 17:49 编辑 [/it]]
----------------解决方案--------------------------------------------------------
result = (result >= i) ? result : i; //result永远不可能大于或等于i吧
直接 result=i就可以了
最小公倍数可以使用 辗转相除法
----------------解决方案--------------------------------------------------------
嗯,同意二楼的。
result = (result >= i) ? result : i;
直接改成
result = i;
即可
----------------解决方案--------------------------------------------------------
哦,说得对,谢谢楼上的两位哦!!!!
----------------解决方案--------------------------------------------------------
不错``````````
----------------解决方案--------------------------------------------------------
谢谢楼上的!!!!!!感动。。。。。。
----------------解决方案--------------------------------------------------------
lz的题目是不是写错了
则么会是最小公约数和最大公倍数那,最小公约数不就是1吗,最大公倍数那就是无穷了.
----------------解决方案--------------------------------------------------------
是错了,谢谢秦始皇。。。。。。。
----------------解决方案--------------------------------------------------------
你太客气了,寡人一向助人为乐。哈哈。。。。。
----------------解决方案--------------------------------------------------------
如果面试你这么答,人家很失望的。如果给你两个数是1000001,1000003,
你这个最大公约数要算到多久?另外你函数里那个result也用的莫名其妙~。(总算明白你的意思了,原来你只是想把所有公约数临时记录到result。)
这个要用欧几里德算法来求,也就是前面那位网友说的辗转相除法。救人救到底,我还是给你写出来吧:最大公约数:
gcd(m,n)= m; (n=0)
gcd(n,m%n); (其他)
最小公倍数=m*n/gcd(m,n);
----------------解决方案--------------------------------------------------------