Suma dos números sin usar operadores aritméticos

C++

#include <iostream>
using namespace std;
 
int add(int a, int b)
{
    // for loop will start from 1 and move till the value of
    // second number , first number(a) is incremented in for
    // loop
    for (int i = 1; i <= b; i++)
        a++;
    return a;
}
 
int main()
{
    // first number is 10 and second number is 32 , for loop
    // will start from 1 and move till 32 and the value of a
    // is incremented 32 times which will give us the total
    // sum of two numbers
 
    int a = add(10, 32);
    cout << a;
    return 0;
}
 
// This code is contributed by Aditya Kumar (adityakumar129)

C

#include <stdio.h>
 
int add(int a, int b)
{
    // for loop will start from 1 and move till the value of
    // second number , first number(a) is incremented in for
    // loop
    for (int i = 1; i <= b; i++)
        a++;
    return a;
}
 
int main()
{
    // first number is 10 and second number is 32 , for loop
    // will start from 1 and move till 32 and the value of a
    // is incremented 32 times which will give us the total
    // sum of two numbers
 
    int a = add(10, 32);
    printf("%d", a);
    return 0;
}
 
// This code is contributed by Aditya Kumar (adityakumar129)

Java

import java.util.*;
 
class GFG {
 
    static int add(int a, int b)
    {
        // for loop will start from 1 and move till the
        // value of second number , first number(a) is
        // incremented in for loop
        for (int i = 1; i <= b; i++)
            a++;
        return a;
    }
 
    public static void main(String[] args)
    {
        // first number is 10 and second number is 32 , for
        // loop will start from 1 and move till 32 and the
        // value of a is incremented 32 times which will
        // give us the total sum of two numbers
        int a = add(10, 32);
        System.out.print(a);
    }
}
 
// This code is contributed by Aditya Kumar (adityakumar129)

Python3

# Python implementation
def add(a, b):
    # for loop will start from 1 and move till the value of second number ,
    # first number(a) is incremented in for loop
    for i in range(1, b + 1):
        a = a + 1
    return a
 
 
# driver code
# first number is 10 and second number is 32 , for loop
# will start from 1 and move till 32 and the value of a
# is incremented 32 times which will give us the total
# sum of two numbers
a = add(10, 32)
print(a)
 
# This code is contributed by Aditya Kumar (adityakumar129)

C#

using System;
public class GFG {
 
  static int add(int a, int b) {
    for (int i = 1; i <= b; i++) // for loop will start from 1 and move till the value of second
      // number , first number(a) is incremented in for loop
    {
      a++;
    }
    return a;
  }
 
  public static void Main(String[] args)
  {
 
    int a = add(10, 32); // first number is 10 and second number is 32 , for loop will start
    Console.Write(a); // from 1 and move till 32 and the value of a is incremented 32 times
    // which will give us the total sum of two numbers
  }
}
 
// This code is contributed by Rajput-Ji

Javascript

<script>
    function add(a , b)
    {
         // for loop will start from 1 and move till the value of second
        // number , first number(a) is incremented in for loop
        for (i = 1; i <= b; i++)
        {
            a++;
        }
        return a;
    }
 
    // first number is 10 and second number is 32 , for loop will start
    var a = add(10, 32);
     
    // from 1 and move till 32 and the value of a is incremented 32 times
    // which will give us the total sum of two numbers
    document.write(a);
 
// This code is contributed by Rajput-Ji
</script>

Escriba una función Add() que devuelva la suma de dos enteros. La función no debe utilizar ninguno de los operadores aritméticos (+, ++, –, -, .. etc.).
La suma de dos bits se puede obtener realizando XOR (^) de los dos bits. El bit de acarreo se puede obtener realizando AND (&) de dos bits. 

Arriba hay una lógica simple de Half Adder que se puede usar para agregar 2 bits individuales. Podemos extender esta lógica para números enteros. Si x e y no tienen bits establecidos en la(s) misma(s) posición(es), entonces XOR bit a bit (^) de xey da la suma de xey. Para incorporar también bits de configuración comunes, se utiliza AND bit a bit (&). AND bit a bit de xey da todos los bits de acarreo. Calculamos (x & y) << 1 y lo sumamos a x ^ y para obtener el resultado requerido. 

C++

// C++ Program to add two numbers
// without using arithmetic operator
#include <bits/stdc++.h>
using namespace std;
 
int Add(int x, int y)
{
    // Iterate till there is no carry
    while (y != 0)
    {
        // carry should be unsigned to
        // deal with -ve numbers
        // carry now contains common
        //set bits of x and y
        unsigned carry = x & y;
 
        // Sum of bits of x and y where at
        //least one of the bits is not set
        x = x ^ y;
 
        // Carry is shifted by one so that adding
        // it to x gives the required sum
        y = carry << 1;
    }
    return x;
}
 
// Driver code
int main()
{
    cout << Add(15, 32);
    return 0;
}
 
// This code is contributed by rathbhupendra

C

// C Program to add two numbers
// without using arithmetic operator
#include<stdio.h>
 
int Add(int x, int y)
{
    // Iterate till there is no carry 
    while (y != 0)
    {
        // carry now contains common
        //set bits of x and y
        unsigned carry = x & y; 
 
        // Sum of bits of x and y where at
        //least one of the bits is not set
        x = x ^ y;
 
        // Carry is shifted by one so that adding
        // it to x gives the required sum
        y = carry << 1;
    }
    return x;
}
 
int main()
{
    printf("%d", Add(15, 32));
    return 0;
}

Java

// Java Program to add two numbers
// without using arithmetic operator
import java.io.*;
 
class GFG
{
    static int Add(int x, int y)
    {
        // Iterate till there is no carry
        while (y != 0)
        {
            // carry now contains common
            // set bits of x and y
            int carry = x & y;
 
            // Sum of bits of x and
            // y where at least one
            // of the bits is not set
            x = x ^ y;
 
            // Carry is shifted by
            // one so that adding it
            // to x gives the required sum
            y = carry << 1;
        }
        return x;
    }
     
    // Driver code
    public static void main(String arg[])
    {
        System.out.println(Add(15, 32));
    }
}
 
// This code is contributed by Anant Agarwal.

Python3

# Python3 Program to add two numbers
# without using arithmetic operator
def Add(x, y):
 
    # Iterate till there is no carry
    while (y != 0):
     
        # carry now contains common
        # set bits of x and y
        carry = x & y
 
        # Sum of bits of x and y where at
        # least one of the bits is not set
        x = x ^ y
 
        # Carry is shifted by one so that  
        # adding it to x gives the required sum
        y = carry << 1
     
    return x
 
print(Add(15, 32))
 
# This code is contributed by
# Smitha Dinesh Semwal

C#

// C# Program to add two numbers
// without using arithmetic operator
using System;
 
class GFG
{
    static int Add(int x, int y)
    {
        // Iterate till there is no carry
        while (y != 0)
        {
            // carry now contains common
            // set bits of x and y
            int carry = x & y;
 
            // Sum of bits of x and
            // y where at least one
            // of the bits is not set
            x = x ^ y;
 
            // Carry is shifted by
            // one so that adding it
            // to x gives the required sum
            y = carry << 1;
        }
        return x;
    }
     
    // Driver code
    public static void Main()
    {
        Console.WriteLine(Add(15, 32));
    }
}
 
// This code is contributed by vt_m.

PHP

<?php
// PHP Program to add two numbers
// without using arithmetic operator
 
function Add( $x, $y)
{
     
    // Iterate till there is
    // no carry
    while ($y != 0)
    {
         
        // carry now contains common
        //set bits of x and y
        $carry = $x & $y;
 
        // Sum of bits of x and y where at
        //least one of the bits is not set
        $x = $x ^ $y;
 
        // Carry is shifted by one
        // so that adding it to x
        // gives the required sum
        $y = $carry << 1;
    }
    return $x;
}
 
    // Driver Code
    echo Add(15, 32);
 
// This code is contributed by anuj_67.
?>

Javascript

<script>
 
// Javascript Program to add two numbers
// without using arithmetic operator
 
   
    function Add(x, y) {
        // Iterate till there is no carry  
        while (y != 0)
        {
            // carry now contains common 
            //set bits of x and y
            let carry = x & y;  
   
            // Sum of bits of x and y where at 
            //least one of the bits is not set
            x = x ^ y; 
   
            // Carry is shifted by one so that adding
            // it to x gives the required sum
            y = carry << 1;
        }
        return x;
    }
   
     //driver code
    document.write(Add(15, 32));
  
// This code is contributed by Surbhi Tyagi
</script>

Producción : 

47

Complejidad del tiempo: O(log y)

Espacio Auxiliar: O(1)

A continuación se muestra la implementación recursiva para el mismo enfoque.

C++

int Add(int x, int y)
{
    if (y == 0)
        return x;
    else
        return Add( x ^ y,(unsigned) (x & y) << 1);
}
 
// This code is contributed by shubhamsingh10

C

int Add(int x, int y)
{
    if (y == 0)
        return x;
    else
        return Add( x ^ y, (unsigned)(x & y) << 1);
}

Java

static int Add(int x, int y)
{
  if (y == 0)
    return x;
  else
    return Add(x ^ y, (x & y) << 1);
}
 
// This code is contributed by subham348

Python3

def Add(x, y):
   
    if (y == 0):
        return x
    else
        return Add( x ^ y, (x & y) << 1)
     
# This code is contributed by subhammahato348

C#

static int Add(int x, int y)
{
  if (y == 0)
    return x;
  else
    return Add(x ^ y, (x & y) << 1);
}
 
// This code is contributed by subhammahato348

Javascript

function Add(x, y)
{
    if (y == 0)
        return x;
    else
        return Add(x ^ y, (x & y) << 1);
}
 
// This code is contributed by Ankita saini

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *