| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1841 人关注过本帖
标题:【讨论】如何返回两个数中较大的数
取消只看楼主 加入收藏
永久的守护
Rank: 1
等 级:新手上路
威 望:2
帖 子:425
专家分:6
注 册:2007-6-9
结帖率:75%
收藏
 问题点数:0 回复次数:7 
【讨论】如何返回两个数中较大的数
怎样求两个正整数的较大者?   
比如:unsigned   int   Max(unsigned   int   a,   unsigned   int   b);   
   
要求:     
不准在函数体中使用任何比较运算,比如if,for,while等,也不能用与或非,不准调用任何库函数。

据说有很多种答案
大家研究一下
搜索更多相关主题的帖子: 正整数 答案 
2008-07-31 18:26
永久的守护
Rank: 1
等 级:新手上路
威 望:2
帖 子:425
专家分:6
注 册:2007-6-9
收藏
得分:0 
当然不可以了
不允许?:

见了便做做了便放下了了有何不了,慧生于觉觉生于自在生生还是无生。
活则生变,简而至稳。
2008-07-31 19:02
永久的守护
Rank: 1
等 级:新手上路
威 望:2
帖 子:425
专家分:6
注 册:2007-6-9
收藏
得分:0 
这个是一个公司的面试题
但是很久很久以前的了 在CSDN上看到的
感觉挺有意思 就又贴到这里了

见了便做做了便放下了了有何不了,慧生于觉觉生于自在生生还是无生。
活则生变,简而至稳。
2008-07-31 19:42
永久的守护
Rank: 1
等 级:新手上路
威 望:2
帖 子:425
专家分:6
注 册:2007-6-9
收藏
得分:0 
[bo][un]flyue[/un] 在 2008-7-31 19:59 的发言:[/bo]

这道题我有个思路:
unsigned int Max(int a, int b)
{
    return a / b;
}

void main()
{
    printf("%d\n", Max(-10000, 10));//小于等于0表示a=b
}

这个题你来回答正对(我说你人来回答对 不是题答的对)
因为这个题就是一个游戏开发公司招游戏编程人员出的题

见了便做做了便放下了了有何不了,慧生于觉觉生于自在生生还是无生。
活则生变,简而至稳。
2008-07-31 20:01
永久的守护
Rank: 1
等 级:新手上路
威 望:2
帖 子:425
专家分:6
注 册:2007-6-9
收藏
得分:0 
[bo][un]卧龙孔明[/un] 在 2008-7-31 20:05 的发言:[/bo]

easy....

int max(int x,int y)
{
    return (((x-y)&(1<<32)*y + (((y-x)&(1<<32)*x;
}

果然厉害 只是我那是unsigned
你得先转换一下

见了便做做了便放下了了有何不了,慧生于觉觉生于自在生生还是无生。
活则生变,简而至稳。
2008-07-31 20:09
永久的守护
Rank: 1
等 级:新手上路
威 望:2
帖 子:425
专家分:6
注 册:2007-6-9
收藏
得分:0 
[bo][un]卧龙孔明[/un] 在 2008-7-31 20:12 的发言:[/bo]

如果用函数,用这个:


int max(int x,int y)
{
    return -(((x-y)&(131)*y - (((y-x)&(131)*x;
}
 

CSDN上的一个:
inline   int   signof(int   i){     
          return   unsigned(i)   >>   (sizeof   (int)   *   8   -   1);     
}     
      
int   max(int   a,   int   b){     
          int   p[2];     
          p[0]   =   a;     
          p[1]   =   b;     
      
          return   p[signof(p[0]   -   p[1])];     
}     

据说还有很多种方法

见了便做做了便放下了了有何不了,慧生于觉觉生于自在生生还是无生。
活则生变,简而至稳。
2008-07-31 20:22
永久的守护
Rank: 1
等 级:新手上路
威 望:2
帖 子:425
专家分:6
注 册:2007-6-9
收藏
得分:0 
[bo][un]卧龙孔明[/un] 在 2008-7-31 20:16 的发言:[/bo]

发现flyue的方法更好啊...

不过他那个如果要求输出最大的数,单是这么写
int max(int x,int y)
{
    return (x/y)*x + (y/x)*y;
}
是错误的。

有0除的危险

见了便做做了便放下了了有何不了,慧生于觉觉生于自在生生还是无生。
活则生变,简而至稳。
2008-07-31 20:23
永久的守护
Rank: 1
等 级:新手上路
威 望:2
帖 子:425
专家分:6
注 册:2007-6-9
收藏
得分:0 
我最开始想到的是这么做
int max(int x,int y)
{
    return (!!(x/(y||1)))*x + (!!(y/(x||1)))*y;
}

如果引入了与或非 题的难度就大大降低了

见了便做做了便放下了了有何不了,慧生于觉觉生于自在生生还是无生。
活则生变,简而至稳。
2008-07-31 20:41
快速回复:【讨论】如何返回两个数中较大的数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012516 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved