请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句?

Crazying111 2008-03-10 09:44:10
1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句


2、如何输出源文件的标题和目前执行行的行数


3、两个数相乘,小数点后位数没有限制,请写一个高精度算法

4、写一个病毒

5、不使用额外空间,将 A,B两链表的元素交*归并

6、将树序列化 转存在数组或 链表中
...全文
7687 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
wx123456p 2012-08-04
  • 打赏
  • 举报
回复
第一题:#define Big(a,b) (a+b+abs(a-b))/2
newplan1986 2011-10-14
  • 打赏
  • 举报
回复
第一题:#define Big(x,y) bool(int((x)-(y))^(1<<31))
newplan1986 2011-10-14
  • 打赏
  • 举报
回复
第一题:#define Big(x,y) int((x)-(y))^(1<<31)
newplan1986 2011-10-14
  • 打赏
  • 举报
回复
mark
冰之蓝 2011-10-03
  • 打赏
  • 举报
回复
我觉得第一题可以用#define MAX(a,b) a-b==abs(a-b)?a:b
scutcs1 2010-10-09
  • 打赏
  • 举报
回复
病毒啊 这么难 宏还好些点
zodeee 2010-10-08
  • 打赏
  • 举报
回复
#define MAX(a,b) a-b?((((double)a-(double)b)/abs(a-b))+1?b:a):a 这个应该没什么问题了,不会溢出了~
zodeee 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 angel0829 的回复:]

引用 4 楼 Chiyer 的回复:
C/C++ code
1) - -b - -b

#define big_than(a, b) (((b) - (a) & (0x1 << 31)) >> 31)

int main()
{
int a = 100;
int b = 10;
int c = 200;

if (big_than(a, b))
printf("……
[/Quote]
看到这个兄弟的回复我恍然大悟,腾讯怎么会那这么简单的题考大家呢,确实要考虑溢出的情况啊,我的也错了
zodeee 2010-10-08
  • 打赏
  • 举报
回复
#define MAX(a,b) (a-b)&(0x1<<31)?b:a
绝对简练,好使
aa122333 2010-10-02
  • 打赏
  • 举报
回复
#define max(a,b) ((double(a)-double(b))?(a):(b))
AllenAmanda 2010-09-25
  • 打赏
  • 举报
回复
哥哥你太厉害了。讨教呢

[Quote=引用 15 楼 chiyer 的回复:]
C/C++ code


太汗了 - -b

#include "math.h"

#define big_than(a, b) (((unsigned long)(((b) - (a)) / abs((b) - (a))) & (0x1 << 31)) >> 31)
[/Quote]
lihao1985527 2010-09-24
  • 打赏
  • 举报
回复
#define max(atc,btc) (btc)?((atc)?((abs(atc/btc)-(atc/btc))?((abs(atc)-atc)?(btc):(atc)):((abs(atc)-atc)?(((atc/btc)?(btc):(atc))):((atc/btc)?(atc):(btc)))):((abs(btc)-btc)?(0):(btc))):((atc)?(((abs(atc)-atc))?(0):(atc)):(0));
pig8310 2010-09-10
  • 打赏
  • 举报
回复
请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
#define max(a,b) (int)(pow(2.0,a-b))?a:b
无天 2009-10-01
  • 打赏
  • 举报
回复
MARK
realyunyunyun 2008-10-23
  • 打赏
  • 举报
回复
#define cmp(a,b) ((a)==(b)?0:((((a)-(b))|(1<<31))==((a)-(b))?-1:1))
angel0829 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Chiyer 的回复:]
C/C++ code
1) - -b - -b

#define big_than(a, b) (((b) - (a) & (0x1 << 31)) >> 31)

int main()
{
int a = 100;
int b = 10;
int c = 200;

if (big_than(a, b))
printf("a > b\n");

if (big_than(b, a))
printf("b > a\n");

if (big_than(a, c))
printf("a > b\n");

if (big_than(c, a))
printf("c > a\n");

return 0;
}…
[/Quote]

别误导大家,兄弟。
你用
int a = 0x80000001;
int b = 0x6FFFFFFF;
试试。

连溢出都不考虑……
Aixnech 2008-03-11
  • 打赏
  • 举报
回复
mark~^-^
ayw215 2008-03-11
  • 打赏
  • 举报
回复
一堆无聊的题目
一堆无聊的人
baihacker 2008-03-11
  • 打赏
  • 举报
回复
(a) < 0 || (b) < 0
貌似还要改成
(a) < 0 || (b) < 0 || -(a) < 0 || -(b) < 0
baihacker 2008-03-11
  • 打赏
  • 举报
回复

#include <algorithm>
#include <list>
#include <iostream>
#include <stdlib.h>
using namespace std;
#define new_big_than(a, b) !!( ((a) < 0 || (b) < 0) ? (((b) - (a) & (0x1 << 31)) >> 31) : (( (b) == 0)? (a): (a)/(b)) )
#define old_big_than(a, b) !!(((b) - (a) & (0x1 << 31)) >> 31)

const char* info[] = {"假", "真"};
#define PRINT_RESULT_NEW(a, b) cout << "new:\t" << a << " > " << b << "\t" << info[new_big_than(a, b)] << endl
#define PRINT_RESULT_OLD(a, b) cout << "old:\t" << a << " > " << b << "\t" << info[old_big_than(a, b)] << endl

#define PRINT_NEW(a, b) PRINT_RESULT_NEW(a, b); PRINT_RESULT_NEW(b, a)
#define PRINT_OLD(a, b) PRINT_RESULT_OLD(a, b); PRINT_RESULT_OLD(b, a)

#define PRINT(a, b) PRINT_NEW(a, b); PRINT_OLD(a, b)

int main()
{
int a = 10, b = 100, c = -10, d = -100;
unsigned int e = 0, f = 100, g = 0xffffffff ;

PRINT(a, b);
PRINT(a, c);
PRINT(a, d);
PRINT(b, c);
PRINT(b, d);
PRINT(c, d);

PRINT(e, f);
PRINT(e, g);
PRINT(f, g);

return 0;
}

加载更多回复(27)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧