免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: HappyWin

不用判断语句,求两个数的最大值  关闭 [复制链接]

论坛徽章:
0
发表于 2004-10-12 01:19 |显示全部楼层

不用判断语句,求两个数的最大值


  1. int
  2. new_max (int a, int b)
  3. {
  4.         return (a>;=b)*a + (a<b)*b;
  5. }
复制代码


这次应该行了
如果还有错........我就放弃了   

论坛徽章:
0
发表于 2004-10-12 02:11 |显示全部楼层

不用判断语句,求两个数的最大值

恩,办法是人想出来的, 只有想不到的, 没有做不到的!

论坛徽章:
0
发表于 2004-10-12 08:33 |显示全部楼层

不用判断语句,求两个数的最大值

原帖由 "FH" 发表:
A0110A的对么?一个很大的正数和一个很小的负数比较会得什么?
用8位来看吧:127-(-12=-1,由于高位是1,所以该函数返回-128!


避免溢出的话,对要求不做判断得出结果来说要求太高吧。要不加一层try{}catch{}?

论坛徽章:
0
发表于 2004-10-12 09:02 |显示全部楼层

不用判断语句,求两个数的最大值

这样如何?

int
new_max (int a, int b)
{
        return  a>;b?a:b;
}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2004-10-12 09:12 |显示全部楼层

不用判断语句,求两个数的最大值

原帖由 "spring2spring" 发表:
这样如何?

int
new_max (int a, int b)
{
        return  a>;b?a:b;
}


当然不行,题目说的好好的。

论坛徽章:
0
发表于 2004-10-12 09:12 |显示全部楼层

不用判断语句,求两个数的最大值

呵呵。如果要避免溢出的话简单点就要把存放计算结果的提高一个级别了。
当然不提高也可以,但是会繁一点 。

论坛徽章:
0
发表于 2004-10-12 09:18 |显示全部楼层

不用判断语句,求两个数的最大值

  1. typedef        int        T_NUM;

  2. #define        SHIFTBITS        ( sizeof( T_NUM ) * 8 - 1 )

  3. static        int        CheckFlag( T_NUM x, T_NUM y )
  4. {
  5.         int        s1 = x >;>; SHIFTBITS;
  6.         int        s2 = y >;>; SHIFTBITS;

  7.         return ( s1 * 2 + s2 );
  8. }

  9. static        T_NUM        SameSign( int Flag, T_NUM x, T_NUM y )
  10. {
  11.         T_NUM        z = x - y;
  12.         T_NUM        t[2] = { x, y };
  13.         int        s = z >;>; SHIFTBITS;

  14.         return t[s];
  15. }

  16. static        T_NUM        DiffSign( int Flag, T_NUM x, T_NUM y )
  17. {
  18.         T_NUM        t[2] = { x, y };

  19.         return t[Flag - 1];
  20. }

  21. static        (*T_NUM)( int, T_NUM, T_NUM )        FuncList[] = {
  22.         SameSign, DiffSign, DiffSign, SameSign
  23. };

  24. T_NUM        Max( T_NUM x, T_NUM y )
  25. {
  26.         int        Flag = CheckFlag( x, y );

  27.         return (*FuncList[Flag])( Flag, x, y );
  28. }
复制代码

论坛徽章:
0
发表于 2004-10-12 09:25 |显示全部楼层

不用判断语句,求两个数的最大值

看清楚他的要求就是不用任何的判断语句如if、switch、?:等,找出其中的大值。
    如果我的理解没有问题的话,大于号应该不是判断吧(是比较,嘿嘿)。那问题就该是如此简单啊。
main()
{
int a[2]={129,17},f;
f=a[1]>;a[0];
printf("%d\n",a[f]);
}

注:数组思想来自上面各位老大的帖子。

论坛徽章:
0
发表于 2004-10-12 10:01 |显示全部楼层

不用判断语句,求两个数的最大值

FH 的方法没有使用逻辑表达式和判断语句,整个过程有点布电路的感觉,很精彩。


ps>; 我的 PM 有问题,以后回复你。

论坛徽章:
0
发表于 2004-10-12 12:21 |显示全部楼层

不用判断语句,求两个数的最大值

max(a,b)=((a+b)+abs(a-b))/2
min(a,b)=((a+b)-abs(a-b))/2
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP