朗讯面试题

shiaisong 2004-10-25 09:36:50
There are two int variables: a and b, don’t use “if”, “? :”, “switch” or other judgement statements, find out the biggest one of the two numbers.
...全文
1754 86 打赏 收藏 转发到动态 举报
写回复
用AI写文章
86 条回复
切换为时间正序
请发表友善的回复…
发表回复
lujianping 2004-11-04
  • 打赏
  • 举报
回复
看看正确结果吧:

a&~((a-b)>>31))+(b&~((b-a)>>31)

绝对没有任何的比较函数,没有除0问题,整数负数都没问题,我用100分担保。
Aylazhang 2004-10-30
  • 打赏
  • 举报
回复
化繁为简!
hy1080 2004-10-30
  • 打赏
  • 举报
回复
crystaldn(crystaldn) ( ) 的方法显然不正确
Q_Qwert 2004-10-29
  • 打赏
  • 举报
回复
don’t use “if”, “? :”, “switch” or other judgement statements,


->所以最后的答案应该是: return (int)(a>b)*a + (int)(a<=b)*b;

->pmax = p[a<b];
这有几个判断了?!。。。

ra3 2004-10-29
  • 打赏
  • 举报
回复

好贴,收藏!

牛人真多。 :)
cber 2004-10-29
  • 打赏
  • 举报
回复
晕,写个程序错了那么多,看来最近写程序确实是少了
to 三角猫:
你可以把上面的逻辑操作用相应的位操作替换就可以了,如'||'换成'|','&&'换成'&'试一试
我实在是没有精力再测试了
cber 2004-10-29
  • 打赏
  • 举报
回复
晕,还是写错了
应该是:
int get_sign_symbol(int val)
{
int tmp = val;
tmp >>= (sizeof(val) * CHAR_BIT - 1);
tmp &= 0x1;
return tmp;
}
deltacat 2004-10-29
  • 打赏
  • 举报
回复
其实我觉得用移位比较好。

另外,题面上虽说是judgement statements,出题的意思应该是不作比较而得出。所以题目的意思应该是逻辑操作都是不能用的。
cber 2004-10-29
  • 打赏
  • 举报
回复
ft,这个函数写错了,应该是
int get_sign_symbol(int val)
{
return val >> (sizeof(val) * CHAR_BITS - 1);
}
cber 2004-10-29
  • 打赏
  • 举报
回复
#include <iostream>

using namespace std;

int get_sign_symbol(int val)
{
return val >> (sizeof(val) - 1);
}

int is_not_zero(int val)
{
val <<= 2;
val /= (val - 1);
val &= 0x1;
return val;
}

int main()
{
int a = 5, b = 4;
int nums[2];
nums[0] = a;
nums[1] = b;

int c, d, e, f, g, h, i;

c = a << 1;
d = b << 1;
e = a & 0x1;
f = b & 0x1;
g = c - d;
h = get_sign_symbol(c - d);
i = get_sign_symbol(e - f);

// if h == 1 (a < b) return nums[1];
// if h == 0 && is_not_zero(g) return nums[0]
// if h == 0 && ^is_not_zero(g) return nums[i]

cout << nums[h || ((is_not_zero(g) ^ 0x1) && i)];

return 0;
}

刚刚写的,充分考虑了溢出问题
Kenny_Glacier 2004-10-29
  • 打赏
  • 举报
回复
#include<stdio.h>
main()
{
int a,b,k;
char *strs[2] = {"a","b"},ch;
scanf("%d%d",&a,&b);
k=a-b;
k=k>>31;
k=k&1;
printf("max=%s",strs[k]);
}
看看这个行吗?? 我不知道怎么说它们相等。


cuikai01 2004-10-29
  • 打赏
  • 举报
回复
int i = (int)pow(2, a-b);//2的a-b次方
for(;i;)
return a;
return b;
crystaldn 2004-10-29
  • 打赏
  • 举报
回复
max = ((a+b)+sqrt((a-b)*(a-b)) / 2
hy1080 2004-10-29
  • 打赏
  • 举报
回复
fallhunter(不乖) ( )的方法在BCB下也通过了
a=0;
b=0;
a=5;
b=4;
a=4;
b=5;
没有用跳转指令,
汗阿,还好题上只说不许判断没说不许比较

to colin310(别问我是谁) ( )
a<b显然是一个逻辑判断。
apple3_cx 2004-10-28
  • 打赏
  • 举报
回复
血精灵的不错!支持!呵呵
colin310 2004-10-28
  • 打赏
  • 举报
回复
对不起啊,我是新手,pmax = p[a<b];是什么意思啊
双杯献酒 2004-10-28
  • 打赏
  • 举报
回复
fallhunter(不乖)
的方法不错。
wzq1979 2004-10-28
  • 打赏
  • 举报
回复
fallhunter(不乖) 的方法,高。
fallhunter 2004-10-28
  • 打赏
  • 举报
回复

更正:
int * p[2]={&a,&b};
int * pmax;

pmax = p[a<b];

刚在VC试了,OK
fallhunter 2004-10-28
  • 打赏
  • 举报
回复

更正:
int * p[2]={&a,&b};
int * pmax;

pmax = p[a<b];

刚在VC试了,OK
加载更多回复(66)

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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