腾讯一笔试题

原创 2007年10月01日 19:06:00

最近看了腾讯05年的一个笔试题,感觉还好,发上来

题目是这样说的:请定义一个宏,比较两个数ab的大小,不能使用大于、小于、if语句

刚刚开始看到这个题目没有什么思路,后来细细想,突然间有用汇编或是其他语言做它的冲动,这样就可以避开大于、小于和if了,哈哈,不过还是老老实实的用c做吧^_^

有个人给了一个答案是:

 

#include "stdafx.h"
#include <string.h>
#include <iostream>
using namespace std;
 
#define Cmp(x,y) compare(x,y)
 
int compare( int a, int b)
{
     a^=(1<<31); b^=(1<<31);
     int i=31;
    while ((i^-1) && !((a&(1<<i))^(b&(1<<i))))     i--;
     return (i^-1)?(((a>>i)&1)?1:-1):0;
}
 
int _tmain()
{
     int c;
     c = Cmp(5,4);
     cout<<c<<endl;
     return 0;
}

 我看了看,看着那个按位异或“^”的符号头疼,算起来真麻烦,于是便不看了。

自己想了想,于是用了abs函数和switch语句,通过abs(a-b)和a-b的差就可以得出结果,感觉比它的好理解

前些天又跟学长讨论,学长说可以转换为条件运算符“ ? : ”和“==”,他给了我一个除法的运算的实现:

#define max(a,b) (a==b)?a:((a-b)/abs(a-b)==1?a:b))

后来我突发奇想,其实我的abs减法也可以用条件运算符的于是把自己代码简化了:

#define max(a,b) (abs(a-b)-(a-b))==0?a:b

事后再想想,其实那个“==”也可以去掉了,相减只能得到0或负数,非零即为真,所以可以简化为:

#define max(a,b) (abs(a-b)-(a-b))?b:a

这样应该是最简单的结果了吧?

如果谁有更简单的分享一下哦^_^

感觉做一些题,找个人讨论一下,既有乐趣,又有挑战性,还可以感受到成功的喜悦,爽,哈哈

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

腾讯笔试题精选二

  • 2015-07-11 11:36
  • 49KB
  • 下载

2012.9腾讯笔试题: 顺序输出到栈, 栈中元素可任意时刻出栈. 求输出序列的可能数

问题描述: n个不相同元素顺序输入到 一个栈, 栈可以里的元素可在任意时刻出栈. 求出栈的可能序列数.  这是一个填空题, 求出当N等于5的情况的可能序列数. 很容易可以得到N等于2,3,4...

腾讯笔试题精选二

这些题目来自国嵌嵌入式培训视频《语言的艺术-笔试专题班》,特地整理下以便学习,如有错误欢迎指正 1. 考虑函数原型 void hello(int a, int b=7, char* pszC="*"...

腾讯笔试题精选一

  • 2015-07-11 11:32
  • 42KB
  • 下载

经典面试题(三)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯

1.判断单链表是否有环,要求空间尽量少(2011年MTK) 如何找出环的连接点在哪里? 如何知道环的长度?   很经典的题目。 1.判断是否有环。使用两个指针。一个每次前进1,另一个每次前进...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)