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
          主站蜘蛛池模板: 营山县| 白水县| 新津县| 陕西省| 九龙县| 昌图县| 大名县| 湟源县| 襄城县| 德令哈市| 茌平县| 房产| 新余市| 康马县| 文成县| 茂名市| 夏河县| 尚义县| 吴江市| 张家港市| 襄樊市| 深圳市| 镇安县| 石嘴山市| 东乌珠穆沁旗| 尤溪县| 江阴市| 辽阳市| 新竹市| 乐业县| 德昌县| 永和县| 得荣县| 安多县| 永安市| 巫溪县| 成安县| 太湖县| 咸丰县| 海安县| 商河县|