程序分析: 在数学中,两个数的最小公倍数=两个数的乘积/两数的最大公约数. 求两个数的最大公约数,运用辗转相除法:已知两个整数M和N,假定M>N,则求M%N. 如果余数为0,则N即为所求:如果余数不为0,用N除,再求其余数...直到余数为0,则除数就是M和N的最大公约数 代码: #include<stdio.h> int gcd(int a, int b)/*求最大公约数*/ { int r, t; if(a<b) { t = a; a = b; b = t; } r = a %
这个题貌似完全颠覆一般的Logic:交换两个整数需要一个额外的空间用于保存: t = b; b = a; a = t; 粗看上去似乎没有办法,但是仔细想一下,既然不能用额外的空间,那么能用的方法就只有数学方法,也许有效,那么第一个想法就是用A+b看看,稍微想一下就可以得到下面这个解法: a = a + b; b = a - b; a = a - b; 这种方法会有问题,a+b有可能溢出,但异或就不会有溢出问题. 还有更绝的(由DxZ网友提供): a = a ^ b;b = a ^ b;a