Given three integers a, b and c where c can be either 0 or 1. Without using any arithmetic, relational and conditional operators set the value of a variable x based on below rules –

If c = 0x= a Else // Note c is binaryx= b.

Examples:

Input:a = 5, b = 10, c = 0;Output:x = 5Input:a = 5, b = 10, c = 1;Output:x = 10

**Solution 1:** Using arithmetic operators

If we are allowed to use arithmetic operators, we can easily calculate x by using any one of below expressions –

x = ((1 - c) * a) + (c * b) OR x = (a + b) - (!c * b) - (c * a); OR x = (a * !c) | (b * c);

`#include <iostream> ` `using` `namespace` `std; ` ` ` `int` `calculate(` `int` `a, ` `int` `b, ` `int` `c) ` `{ ` ` ` `return` `((1 - c) * a) + (c * b); ` `} ` ` ` `int` `main() ` `{ ` ` ` `int` `a = 5, b = 10, c = 0; ` ` ` ` ` `int` `x = calculate(a, b, c); ` ` ` `cout << x << endl; ` ` ` ` ` `return` `0; ` `} ` |

Output:

5

**Solution 2: **Without using arithmetic operators

The idea is to construct an array of size 2 such that index 0 of the array stores value of variable ‘a’ and index 1 value of variable b. Now we return value at index 0 or at index 1 of the array based on value of variable c.

`#include <iostream> ` `using` `namespace` `std; ` ` ` `int` `calculate(` `int` `a, ` `int` `b, ` `int` `c) ` `{ ` ` ` `int` `arr[] = {a, b}; ` ` ` `return` `*(arr + c); ` `} ` ` ` `int` `main() ` `{ ` ` ` `int` `a = 5, b = 10, c = 1; ` ` ` ` ` `int` `x = calculate(a, b, c); ` ` ` `cout << x << endl; ` ` ` ` ` `return` `0; ` `} ` |

Output:

10

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

## leave a comment

## 0 Comments