免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: HappyWin
打印 上一主题 下一主题

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

论坛徽章:
0
81 [报告]
发表于 2004-10-18 12:21 |只看该作者

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

请看清楚
(a-b)-(b-a)除了0之外,要莫是负数的2的倍数,要么是正数的2的倍数

负的2的倍数+1取2的余数一定是-1啊

然后其它就不要我说了吧

论坛徽章:
0
82 [报告]
发表于 2004-10-18 14:29 |只看该作者

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

呵呵,还是用127和-128验证一下8位的情况就知道了。
请楼上的作者自己验算一下。

论坛徽章:
0
83 [报告]
发表于 2004-10-18 15:17 |只看该作者

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

原帖由 "FH" 发表:
呵呵,还是用127和-128验证一下8位的情况就知道了。
请楼上的作者自己验算一下。


我在sco-unix 5.05下运行是一定没有问题的。相信在其它unix环境也不会有问题。

换个写法:
i = (2*(a-b) + 1)/2

呵呵,这种写法,楼上的一看就清楚了吧
a-b小于0时返回-1
a-b大于等于0时返回+1

做程序你不可能让带入的参数a和b恶意越界吧。
      

论坛徽章:
0
84 [报告]
发表于 2004-10-18 15:19 |只看该作者

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

i = (2*(a-b) + 1)%2
写错了,不好意思

论坛徽章:
0
85 [报告]
发表于 2004-10-18 15:39 |只看该作者

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

楼上的,什么叫恶意越界啊?你的程序是给别人用的还是给自己玩的?不做临界测试怎么知道正确性呢?那不越界不就是自己哄着自己玩么?

论坛徽章:
0
86 [报告]
发表于 2004-10-18 16:28 |只看该作者

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

这还不简单,把代码自己去试试就行了。不行就把不行的结果贴不出。大家一看就明白。光说也没有用啊

论坛徽章:
0
87 [报告]
发表于 2004-10-18 17:13 |只看该作者

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


  1. #include <stdio.h>;

  2. #define new_max(x, y, z) z = x - y, (z = (*((unsigned int *)&z) >;>; 31) & 1)

  3. int main(void)
  4. {
  5.         int x, y, z;

  6.         x = -100;
  7.         y = 10;
  8.         new_max(x, y, z);
  9.         printf("max = [%d]\n", (1 - z) * x + z * y);
  10. }
复制代码

我觉得可以用指针类型的强制转换来防止溢出问题,实验了一下可以的.

论坛徽章:
0
88 [报告]
发表于 2004-10-18 17:24 |只看该作者

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

[quote]原帖由 "dysnake"]我觉得可以用指针类型的强制转换来防止溢出问题,实验了一下可以的.[/quote 发表:

呵呵,很幽默!不知道试验是怎么做的。是用0x7FFFFFFF-0x80000000么?

论坛徽章:
0
89 [报告]
发表于 2004-10-18 17:31 |只看该作者

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

呵呵,居然还有那么多人在研究这个问题啊!

只要用到了相减,肯定会存在越界的问题。

估计只能这么解决了
int run(int num1,int num2)
{
__int64 a[2];
a[0] = num1;
a[1] = num2;
..............
...........
........

}

论坛徽章:
0
90 [报告]
发表于 2004-10-22 10:59 |只看该作者

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

max(int a, int b)
{
    return((a+b)/2+abs((a-b+1)/2));
}

应该就这么简单吧!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP