Рубрики

Добавьте два числа без использования арифметических операторов

Напишите функцию Add (), которая возвращает сумму двух целых чисел. Функция не должна использовать ни одного из арифметических операторов (+, ++, -, -, … и т. Д.).

Сумма двух битов может быть получена путем выполнения XOR (^) двух битов. Несущий бит может быть получен путем выполнения И (&) двух битов.
Выше приведена простая логика Half Adder, которую можно использовать для добавления двух отдельных битов. Мы можем расширить эту логику для целых чисел. Если x и y не имеют установленных битов в одной и той же позиции (ях), то битовое значение XOR (^) для x и y дает сумму x и y. Для включения общих битов также используется побитовое И (&). Побитовое И х и у дает все биты переноса. Мы вычисляем (x & y) << 1 и добавляем его к x ^ y, чтобы получить требуемый результат.

C ++

// C ++ Программа для добавления двух чисел
// без использования арифметического оператора
#include <bits/stdc++.h>

using namespace std;

  

int Add(int x, int y) 

    // Итерация, пока нет переноса

    while (y != 0) 

    

        // carry теперь содержит общее

        // установить биты x и y

        int carry = x & y; 

  

        // Сумма битов х и у, где в

        // хотя бы один из битов не установлен

        x = x ^ y; 

  

        // Перенос смещен на единицу так, что добавление

        // это х дает необходимую сумму

        y = carry << 1; 

    

    return x; 

  
// Код драйвера

int main() 

    cout << Add(15, 32); 

    return 0; 

  
// Этот код предоставлен rathbhupendra

С

// C Программа для добавления двух чисел
// без использования арифметического оператора
#include<stdio.h>

  

int Add(int x, int y)

{

    // Итерация, пока нет переноса

    while (y != 0)

    {

        // carry теперь содержит общее

        // установить биты x и y

        int carry = x & y;  

  

        // Сумма битов х и у, где в

        // хотя бы один из битов не установлен

        x = x ^ y; 

  

        // Перенос смещен на единицу так, что добавление

        // это х дает необходимую сумму

        y = carry << 1;

    }

    return x;

}

  

int main()

{

    printf("%d", Add(15, 32));

    return 0;

}

Джава

// Java-программа для добавления двух чисел
// без использования арифметического оператора

import java.io.*;

  

class GFG 

{

    static int Add(int x, int y)

    {

        // Итерация, пока нет переноса

        while (y != 0

        {

            // carry теперь содержит общее

            // установить биты x и y

            int carry = x & y;

  

            // сумма битов х и

            // у где хотя бы один

            // биты не установлены

            x = x ^ y;

  

            // Carry сдвигается на

            // один, чтобы добавить его

            // х дает необходимую сумму

            y = carry << 1;

        }

        return x;

    }

      

    // Код драйвера

    public static void main(String arg[]) 

    {

        System.out.println(Add(15, 32));

    }

}

  
// Этот код предоставлен Anant Agarwal.

python3

# Python3 Программа для добавления двух чисел
# без использования арифметического оператора

def Add(x, y):

  

    # Итерируйте, пока нет переноса

    while (y != 0):

      

        # carry теперь содержит общие

        # установить биты х и у

        carry = x & y

  

        # Сумма битов х и у, где в

        # хотя бы один из битов не установлен

        x = x ^ y

  

        # Carry сдвигается на единицу так, чтобы

        # добавление к x дает необходимую сумму

        y = carry << 1

      

    return x

  

print(Add(15, 32))

  
# Этот код предоставлен
# Смита Динеш Семвал

C #

// C # Программа для добавления двух чисел
// без использования арифметического оператора

using System;

  

class GFG 

{

    static int Add(int x, int y)

    {

        // Итерация, пока нет переноса

        while (y != 0) 

        {

            // carry теперь содержит общее

            // установить биты x и y

            int carry = x & y;

  

            // сумма битов х и

            // у где хотя бы один

            // биты не установлены

            x = x ^ y;

  

            // Carry сдвигается на

            // один, чтобы добавить его

            // х дает необходимую сумму

            y = carry << 1;

        }

        return x;

    }

      

    // Код драйвера

    public static void Main() 

    {

        Console.WriteLine(Add(15, 32));

    }

}

  
// Этот код предоставлен vt_m.

PHP

<?php
// Программа PHP для добавления двух чисел
// без использования арифметического оператора

  

function Add( $x, $y)

{

      

    // Итерация до

    // нет переноса

    while ($y != 0)

    {

          

        // carry теперь содержит общее

        // установить биты x и y

        $carry = $x & $y

  

        // Сумма битов х и у, где в

        // хотя бы один из битов не установлен

        $x = $x ^ $y

  

        // Перенос смещен на один

        // чтобы добавить его в x

        // дает необходимую сумму

        $y = $carry << 1;

    }

    return $x;

}

  

    // Код драйвера

    echo Add(15, 32);

  
// Этот код предоставлен anuj_67.
?>

Выход :

47

Ниже приводится рекурсивная реализация для того же подхода.

int Add(int x, int y)

{

    if (y == 0)

        return x;

    else

        return Add( x ^ y, (x & y) << 1);

}

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Добавьте два числа без использования арифметических операторов

0.00 (0%) 0 votes