天天看點

練習8

    1. #include "stdio.h" 
    2. #include "math.h" 
    3. #define N 18 
    4. void dtob(unsigned int, int*, char*);
    5. unsigned int  btod(int*);
    6. void badd(int*, int*, int*);
    7. void show(int*, char*);
    8. void main()
    9. {
    10.     unsigned int x, y;
    11.     static int xb[N], yb[N], resultb[N], i;
    12.     printf("input the decimal value X and Y:");
    13.     scanf("%d %d", &x, &y);
    14.     dtob(x, xb, "X");
    15.     dtob(y, yb, "Y");
    16.     badd(xb, yb, resultb);
    17.     printf("/nResult convert to be decimal is:%4d/n", btod(resultb));
    18. }
    19. void dtob(unsigned int n, int *nb, char *s)
    20. {
    21.     int i = N;
    22.     while(n)
    23.     {
    24.         nb[--i] = n & 1;
    25.         n >>= 1;
    26.     }
    27.     nb[--i] = -1;
    28.     show(nb, s);
    29. }
    30. void badd(int *xb, int *yb, int *resultb)
    31. {
    32.     int i = 0;
    33.     while(xb[i] != -1 && yb[i] != -1)
    34.         i++;
    35.     resultb[i++] = -1;
    36.     for(; i < N; i++)
    37.     {
    38.         if(xb[i] == -1)
    39.             resultb[i] = yb[i];
    40.         else if(yb[i] == -1)
    41.             resultb[i] = xb[i];
    42.         else
    43.             resultb[i] = xb[i] + yb[i];
    44.     }
    45.     for(i = N; resultb[i] != -1; i--)
    46.     {
    47.         if(resultb[i] > 1)
    48.         {
    49.             resultb[i] %= 2;
    50.             if(resultb[i-1] == -1)
    51.             {
    52.                 resultb[i-1] = 1;
    53.                 resultb[i-2] = -1;
    54.             }
    55.             else
    56.                 resultb[i-1] += 1;
    57.         }
    58.     }
    59.     show(resultb, "Result");
    60. }
    61. unsigned int btod(int* nb)
    62. {
    63.     static unsigned int i, sum;
    64.     for(; nb[i] != -1; i++);
    65.     for(++i; i < N; i++)
    66.         sum += nb[i]*(int)pow(2, N-1-i);
    67.     return sum;
    68. }
    69. void show(int *nb, char *s)
    70. {
    71.     int i;
    72.     printf("/n%s/t= ", s);
    73.     for(i = 0; nb[i] != -1; i++);
    74.     for(++i; i < N; i++)
    75.         printf("%d", nb[i]);
    76. }