免费注册 查看新帖 |

Chinaunix

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

[C] NO1贴:在两个数中找较大的那一个 [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
11 [报告]
发表于 2011-10-28 22:03 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
12 [报告]
发表于 2011-10-29 16:48 |只看该作者
我的想法是:
  1.     #include <stdio.h>
  2.     int main(int argc, char*argv[])
  3.     {
  4.             int a[2];
  5.             long s;
  6.             
  7.             while(1){
  8.                     printf("input two number:");
  9.                     scanf("%d %d", &a[0], &a[1]);
  10.                     s = (long)a[0] - (long)a[1];
  11.                     printf("The larger on is :%d\n", a[ !(s>0)]);
  12.             }
  13.     }
复制代码

论坛徽章:
0
13 [报告]
发表于 2011-10-29 16:49 |只看该作者
我知道这"牛人"心里想的什么无力吐槽
OwnWaterloo 发表于 2011-10-28 14:03


果然是高手。。。

论坛徽章:
0
14 [报告]
发表于 2011-10-29 18:54 |只看该作者
回复 1# sh365


#include <stdio.h>
#include <math.h>

#define MAX(a, b) ((a+b+abs(a-b))/2)

int main(void)
{
        int a, b;
        while (1)
        {
                scanf("%d, %d", &a, &b);
                if (a == MAX(a, b))
                        printf("%d\n", a);
                else
                        printf("%d\n", b);
        }

                return 0;
}

论坛徽章:
0
15 [报告]
发表于 2011-10-29 19:18 |只看该作者
OwnWaterloo和我想的一样阿。。。
我还甚至想到了更低级的法子:内嵌汇编,哈哈~

论坛徽章:
0
16 [报告]
发表于 2011-10-29 19:42 |只看该作者
思路虽然一样不过还是和Own的有些不同。总的来说我这方法稍笨一些。
int max(int a, int b){
        unsigned flag = (unsigned)(a-b) >> 31;
        flag += flag*0xfffffffe;
        return (flag&b) + (~flag&a);
}

这个是假设最高位是sign位,而且在sizeof(int)==4的情况下

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
17 [报告]
发表于 2011-10-29 19:55 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
18 [报告]
发表于 2011-10-29 20:42 |只看该作者
回复 14# caijicheng2006


不能用if
  1. #include <stdio.h>
  2. #include <math.h>

  3. #define MAX(a, b) (a+b+abs(a-b))/2

  4. int main(void)
  5. {
  6.         int a, b;
  7.         while (1)
  8.         {
  9.                 scanf("%d, %d", &a, &b);
  10.                 switch (a == MAX(a, b))
  11.                 {
  12.                         case 1:
  13.                                 printf("%d\n", a);
  14.                                 break;
  15.                         case 0:
  16.                                 printf("%d\n", b);
  17.                                 break;
  18.                         default:
  19.                                 printf("can not get\n");
  20.                                 break;
  21.                 }
  22.         }

  23.         return 0;
  24. }
复制代码

论坛徽章:
0
19 [报告]
发表于 2011-10-29 20:46 |只看该作者
可以用函数,办法就多了

论坛徽章:
0
20 [报告]
发表于 2011-10-29 20:47 |只看该作者
除了通过减法的符号位计算,不知道还有其他办法不?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP