摘要: 在数学中, 辗转相除法,又称欧几里得算法,是求最大公约数的算法。其算法步骤:a,b相除将b赋值给a将余数赋值给b若b为0, 则a为最大公约数;否则执行步骤1-3直至b为0。例如计算6和4的最大公约数:a=6,b=4,a/b余数为2将b赋值给a,a=4将余数赋值给b,b=2b不为0, 重复执行1-3a=4,b=2,a/b余数为0将b赋值给a,a=2将余数赋值给b,b=0b为0, 则此时的a为最大公约数伪代码实现: 1: function gcd(a, b) 2: while b != 0 3: t := b 4: b := a mod b ... 阅读全文
posted @ 2012-04-30 12:20 Newerth 阅读(1833) 评论(0) 推荐(0) 编辑
摘要: 字符串的各种操作向来也是面试官的最爱,从简单的开始:逆序输出字符串。实现1: 1: void reverse(const char *str) 2: { 3: ssize_t i; 4: size_t len = strlen(str); 5: 6: for (i = len; i >=0; --i) { 7: printf("%c", *(str + i)); 8: } 9: printf("\n"); 10: }这里要注意的是循环变量i一定要声明成带符号类型的, 否则就会陷入死循环了。... 阅读全文
posted @ 2012-04-30 11:43 Newerth 阅读(2769) 评论(0) 推荐(0) 编辑
摘要: 在排序算法中,我们经常需要交换两个数的值, 在进入算法之前,先在这里复习一下两数交换的实现方法,算是开胃小菜。实现1:最简单的也是最常用的实现: 1: void swap(int *a, int *b) 2: { 3: int temp = *a; 4: *a = *b; 5: *b = temp; 6: }然而面试官们常常并不满意这样的实现,他们很有可能要求我们不能使用其它内存,那么又有了下面两个实现方法。实现2:异或: 1: void swap(int *a, int *b) 2: { 3: *a = *a ^ ... 阅读全文
posted @ 2012-04-30 11:03 Newerth 阅读(1024) 评论(0) 推荐(0) 编辑