Advertisement
Jvsierra

URI binário

Aug 3rd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.47 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4.  
  5. #define NB 32
  6.  
  7. int binarioParaDecimal(char binario[]);
  8. void decimalParaBinario(int num);
  9. int soma(int n1, int n2);
  10. int maior(int n1, int n2);
  11.  
  12. int main()
  13. {
  14.    
  15.     int n1, n2;
  16.    
  17.     while(scanf("%d %d", &n1, &n2))
  18.         printf("%d\n", soma(n1, n2));
  19. }
  20.  
  21. int binarioParaDecimal(char binario[])
  22. {
  23.     int i, soma = 0;
  24.    
  25.     for(i = strlen(binario) - 1; i >= 0; i--)
  26.     {
  27.        
  28.         if(binario[i] == '1')
  29.             soma += pow(2, i);
  30.            
  31.     }
  32.     return soma;
  33. }
  34.  
  35. void decimalParaBinario(int num, char strDest[])
  36. {
  37.     char binario[NB + 1];
  38.     int i = 0;
  39.    
  40.     while(num > 0)
  41.     {
  42.         if(num % 2 == 0)
  43.             binario[i] = '0';
  44.         else
  45.             binario[i] = '1';
  46.        
  47.         num /= 2;
  48.        
  49.         i++;
  50.     }
  51.    
  52.     binario[i] = '\0';
  53.    
  54.     strcpy(strDest, binario);
  55. }
  56.  
  57. int maior(int n1, int n2)
  58. {
  59.     if(n1 > n2) return n1;
  60.     else return n2;
  61. }
  62.  
  63. int soma(int n1, int n2)
  64. {
  65.     char b1[NB + 1], b2[NB + 2], soma[NB + 1];
  66.    
  67.     int i;
  68.    
  69.     decimalParaBinario(n1, b1);
  70.     decimalParaBinario(n2, b2);
  71.    
  72.     soma[maior(strlen(b1), strlen(b2))] = '\0';
  73.    
  74.     for(i = maior(strlen(b1), strlen(b2)) - 1; i >= 0; i--)
  75.     {
  76.         if(i < strlen(b1))
  77.         {
  78.             if(i < strlen(b2))
  79.             {  
  80.                 if(b1[i] == '0')
  81.                     soma[i] = b2[i];
  82.                 else if(b1[i] == '1')
  83.                 {
  84.                     if(b2[i] == '1')
  85.                         soma[i] = '0';
  86.                     else
  87.                         soma[i] = '1';
  88.                 }
  89.             }
  90.             else
  91.             {
  92.                 soma[i] = b1[i];
  93.             }
  94.         }
  95.         else
  96.             if(i < strlen(b2))
  97.                 soma[i] = b2[i];
  98.     }
  99.    
  100.     return binarioParaDecimal(soma);
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement