免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
111 [报告]
发表于 2005-05-20 17:13 |只看该作者

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

精灵王的思路不错啊。呵呵

论坛徽章:
0
112 [报告]
发表于 2005-05-20 17:14 |只看该作者

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

在glibc中abs是这样实现的:
int abs (int i)
{
  return i < 0 ? -i : i;
}

论坛徽章:
0
113 [报告]
发表于 2005-05-27 10:21 |只看该作者

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

转换成字符串,而后用strcmp哈哈哈。。

论坛徽章:
0
114 [报告]
发表于 2005-05-27 11:17 |只看该作者

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

原帖由 "紫云飞扬" 发表:
用printf将两个int数据打印出来。
然后你盯着屏幕很容易找出较大的那个的。


楼上回答的经典!

论坛徽章:
0
115 [报告]
发表于 2005-05-27 23:45 |只看该作者

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

a0110的程序确实写的很是nb,我佩服了1个礼拜啊!
不过,在int类型为16bit长度的时候,源程序出错,以下的改进应该适用于各种编译器了
int buf[2]={x,y};
z=x-y;
z>;>;=(sizeof(int)*8-1);

论坛徽章:
0
116 [报告]
发表于 2005-05-31 13:16 |只看该作者

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

小弟看了前面高手的答案。自己也写了个,没有调试过,不知道可不可以
while(x){
         x--;
         y--;
         while(!y){
                       printf("max is x";
                       break;
                       };
         while(!x){
                       printf("max is y";
                       break;
                        }
                }   

论坛徽章:
0
117 [报告]
发表于 2005-05-31 13:41 |只看该作者

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

楼上的兄弟
    while()
    当()
    就是判断了吧

论坛徽章:
0
118 [报告]
发表于 2005-06-03 16:34 |只看该作者

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

zhichi

论坛徽章:
0
119 [报告]
发表于 2005-06-05 15:16 |只看该作者

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

只用逻辑运算完成!
_isA递归函数用到了判断,但在使用中可以循环展开以不用判断语句。
注:以下用到了乘法,但是都是用0或1去乘一个数,这很容易用逻辑运算实现。其实,用逻辑运算可实现c程序用到的一切,处理器芯片内部都是用的逻辑门啊。

#include <stdio.h>;
#include <signal.h>;

#define UNSIGNED_INT 0
#if UNSIGNED_INT
unsigned int _A = 0xfffffff1;
unsigned int _B = 0xfff1ffff;
#else
int _A = 0x0f8ffff1;
int _B = 0xff2ffff3;
#endif

/* return bit i of variable A
   */
int A( int i )
{
        return ((unsigned int)_A & (1 << i)) >;>; i;
}
/* return bit i of variable B
   */
int B( int i )
{
        return ((unsigned int)_B & (1 << i)) >;>; i;
}

/* if A(i) >;= B(i), then return 1; else return 0;
   */
int bigger_eq( int i )
{
        return A(i) | !B(i);
}
/* if A(i) >; B(i), then return 1; else return 0;
   */
int bigger( int i )
{
        return A(i) & !B(i) ;
}

/* compare first (i+1) bits of A and B
   if A >;= B; then return 1; else return 0;
   */
int _isA( i )
{
        if( i <= 0 )
                return bigger(i) | bigger_eq(i);
        return bigger(i) | ( bigger_eq(i) & _isA(i-1) );
}

#if UNSIGNED_INT
unsigned int uis()
{
        int s;

        s = _isA(31);
        return s*_A + (!s)*_B;
}
#else
int is()
{
        int sA,sB;
        int s;

        sA = A(31);
        sB = B(31);
        s = _isA(30);
/*
sA sB s isA
0  0  * s
1  0  * 0
0  1  * 1
1  1  * s
*/
#define isA \
        (                                  \
                ((sA^sB) & sB)                 \
                |                              \
                (                              \
                        (!(sA^sB)) & s             \
                )                              \
        )

        printf( "s=%d,sA=%d,sB=%d\n", s, sA, sB );
        return isA*_A + (!isA)*_B;
}
#endif

int main()
{
        int i=0;
        printf( "A=" );
        for( i=31; i>;=0; i-- )
                printf( "%d", A(i) );
        printf( "\nB=" );
        for( i=31; i>;=0; i-- )
                printf( "%d", B(i) );
        printf( "\n" );

#if UNSIGNED_INT
        printf( "<A,B>;=<%u,%u>;\nmax=%u\n", _A, _B, uis() );
#else
        printf( "<A,B>;=<%d,%d>;\nmax=%d\n", _A, _B, is() );
#endif
    return 0;
}

论坛徽章:
0
120 [报告]
发表于 2005-06-05 15:56 |只看该作者

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

cu的牛人真是多!
好好学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP