练习8

 
    1. /***********************************************************************************************
    2. 8. 输入两个正整数X,Y,将X,Y化为二进制数,然后将这两个二进制数作二进
    3.   制加法运算,再将结果化为十进制数输出。
    4. ***********************************************************************************************/
    5. #include "stdio.h" 
    6. #include "math.h" 
    7. #define N 18 
    8. void dtob(unsigned intint*, char*);
    9. unsigned int  btod(int*);
    10. void badd(int*, int*, int*);
    11. void show(int*, char*);
    12. void main()
    13. {
    14.     unsigned int x, y;
    15.     static int xb[N], yb[N], resultb[N], i;
    16.     printf("input the decimal value X and Y:");
    17.     scanf("%d %d", &x, &y);
    18.     dtob(x, xb, "X");
    19.     dtob(y, yb, "Y");
    20.     badd(xb, yb, resultb);
    21.     printf("/nResult convert to be decimal is:%4d/n", btod(resultb));
    22. }
    23. void dtob(unsigned int n, int *nb, char *s)
    24. {
    25.     int i = N;
    26.     while(n)
    27.     {
    28.         nb[--i] = n & 1;
    29.         n >>= 1;
    30.     }
    31.     nb[--i] = -1;
    32.     show(nb, s);
    33. }
    34. void badd(int *xb, int *yb, int *resultb)
    35. {
    36.     int i = 0;
    37.     while(xb[i] != -1 && yb[i] != -1)
    38.         i++;
    39.     resultb[i++] = -1;
    40.     for(; i < N; i++)
    41.     {
    42.         if(xb[i] == -1)
    43.             resultb[i] = yb[i];
    44.         else if(yb[i] == -1)
    45.             resultb[i] = xb[i];
    46.         else
    47.             resultb[i] = xb[i] + yb[i];
    48.     }
    49.     for(i = N; resultb[i] != -1; i--)
    50.     {
    51.         if(resultb[i] > 1)
    52.         {
    53.             resultb[i] %= 2;
    54.             if(resultb[i-1] == -1)
    55.             {
    56.                 resultb[i-1] = 1;
    57.                 resultb[i-2] = -1;
    58.             }
    59.             else
    60.                 resultb[i-1] += 1;
    61.         }
    62.     }
    63.     show(resultb, "Result");
    64. }
    65. unsigned int btod(int* nb)
    66. {
    67.     static unsigned int i, sum;
    68.     for(; nb[i] != -1; i++);
    69.     for(++i; i < N; i++)
    70.         sum += nb[i]*(int)pow(2, N-1-i);
    71.     return sum;
    72. }
    73. void show(int *nb, char *s)
    74. {
    75.     int i;
    76.     printf("/n%s/t= ", s);
    77.     for(i = 0; nb[i] != -1; i++);
    78.     for(++i; i < N; i++)
    79.         printf("%d", nb[i]);
    80. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值