posts - 134,comments - 22,trackbacks - 0
          題目大意:
          如果整數大于0則輸出1;
          等于0則輸出0;
          小于0則輸出1;
          要求不能用任何形式的判斷語句。

          思路:
          設整數N,符號位可以通過如下宏得到:
          #define SIGN(N) (N>>(sizeof(N)*8-1)&0x01)
          那么如果N>0,符號位為0;
          如果N=0,符號位為0;
          N<0,符號位為1;
          這樣沒有辦法區分正數和0!

          如果N>0,N和N-1的符號位之和為0;
          N=0,N和N-1的符號位之和為1
          N<0,N和N-1的符號位之和為2
          這樣可以通過查表得到輸出了。

           1#include <stdio.h>
           2
           3//取得符號位
           4#define SIGN(N) (N>>(sizeof(N)*8-1)&0x01)
           5
           6int T[]={1,0,-1};
           7
           8int sign(int x)
           9{
          10    int index1=SIGN(x);
          11    int index2=SIGN(x-1);
          12    return T[index1+index2];
          13}

          14int main()
          15{
          16    int x=-0;
          17
          18    printf("%d\n",sign(x));
          19
          20    return 0;
          21}

          posted on 2010-06-01 20:07 何克勤 閱讀(275) 評論(0)  編輯  收藏 所屬分類: C/C++Algorithm and Data Structure
          主站蜘蛛池模板: 望江县| 清远市| 桂阳县| 岐山县| 深泽县| 兴宁市| 察哈| 淅川县| 白朗县| 探索| 广平县| 东乌珠穆沁旗| 察哈| 朝阳县| 正镶白旗| 宜黄县| 乌审旗| 莱州市| 兴城市| 洛川县| 阳西县| 准格尔旗| 武威市| 安仁县| 沁源县| 韩城市| 崇仁县| 永善县| 翁源县| 乌审旗| 金溪县| 额敏县| 延寿县| 大新县| 丽江市| 水富县| 平果县| 黄陵县| 雅江县| 天等县| 田阳县|