Skip to content
Related Articles

Related Articles

Improve Article

Decimal equivalent of concatenation of absolute difference of floor and rounded-off values of array elements as a Binary String

  • Last Updated : 12 Jul, 2021

Given an array arr[] consisting of N floating-point numbers, the task is to print the decimal representation of the binary array constructed from the absolute difference between the floor and round-off value for each array element. 

Examples:

Input: arr[] = {1.2, 2.6, 4.2, 6.9, 3.1, 21.6, 91.2}
Output: 42
Explanation:
Below is the image to illustrate the above example:

Input: arr[] = {5.7, 2.8, 1.9, 5.6, 2.2}
Output: 30



Approach: Follow the steps below to solve the problem:

  • Initialize a variable, say result as 0 that stores the resultant numbers formed.
  • Initialize a variable, say power as 0 that keeps the power of 2 added in each step.
  • Traverse the given array arr[] from the end and perform the following steps:
    • Initialize a variable, say bit that stores the absolute difference between the round-off value and the floor value of each array element.
    • If the value of the absolute difference is 1, then multiply the digit with the proper power of 2 and add it to the variable result.
    • Increment the value of power by 1.
  • After completing the above steps, print the value of the result as the required decimal equivalent of the binary representation.

Below is the implementation of the above approach:

C++




// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the decimal equivalent
// of the new binary array constructed
// from absolute decimal of floor and
// the round-off values
int findDecimal(float arr[], int N)
{
    int bit, power = 0, result = 0;
 
    // Traverse the givenarray from
    // the end
    for (int i = N - 1; i >= 0; i--) {
 
        // Stores the absolute difference
        // between floor and round-off
        // each array element
        bit = abs(floor(arr[i])
                  - round(arr[i]));
 
        // If bit / difference is 1, then
        // calculate the bit by proper
        // power of 2 and add it to result
        if (bit)
            result += pow(2, power);
 
        // Increment the value of power
        power++;
    }
 
    // Print the result
    cout << result;
}
 
// Driver Code
int main()
{
    float arr[] = { 1.2, 2.6, 4.2, 6.9,
                    3.1, 21.6, 91.2 };
    int N = sizeof(arr) / sizeof(arr[0]);
    findDecimal(arr, N);
 
    return 0;
}

Java




// Java program for above approach
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG
{
 
// Function to find the decimal equivalent
// of the new binary array constructed
// from absolute decimal of floor and
// the round-off values
static void findDecimal(double arr[], int N)
{
    int bit, power = 0, result = 0;
   
    // Traverse the givenarray from
    // the end
    for (int i = N - 1; i >= 0; i--)
    {
   
        // Stores the absolute difference
        // between floor and round-off
        // each array element
        bit = Math.abs((int)Math.floor(arr[i])
                  - (int)Math.round(arr[i]));
   
        // If bit / difference is 1, then
        // calculate the bit by proper
        // power of 2 and add it to result
        if (bit != 0)
            result += Math.pow(2, power);
   
        // Increment the value of power
        power++;
    }
   
    // Print the result
    System.out.print(result);
}
 
    // Driver Code
    public static void main(String[] args)
    {
    double arr[] = { 1.2, 2.6, 4.2, 6.9,
                    3.1, 21.6, 91.2 };
    int N = arr.length;
    findDecimal(arr, N);
    }
}
 
// This code is contributed by souravghosh0416.

Python3




# Python program for the above approach
 
 
# Function to find the decimal equivalent
# of the new binary array constructed
# from absolute decimal of floor and
# the round-off values
def findDecimal(arr, N):
    power = 0;
    result = 0;
 
    # Traverse the givenarray from
    # the end
    for i in range(N - 1, -1, -1):
 
        # Stores the absolute difference
        # between floor and round-off
        # each array element
        bit = abs(int(arr[i]) - round(arr[i]));
 
        # If bit / difference is 1, then
        # calculate the bit by proper
        # power of 2 and add it to result
        if (bit):
            result += pow(2, power);
 
        # Increment the value of power
        power += 1;
 
    # Print the result
    print(result);
 
 
# Driver Code
 
arr = [ 1.2, 2.6, 4.2, 6.9, 3.1, 21.6, 91.2 ];
N = len(arr)
findDecimal(arr, N);
 
# This code is contributed by gfgking.

C#




// C# program for the above approach
using System;
 
class GFG{
 
// Function to find the decimal equivalent
// of the new binary array constructed
// from absolute decimal of floor and
// the round-off values
static void findDecimal(double[] arr, int N)
{
    int bit, power = 0, result = 0;
    
    // Traverse the givenarray from
    // the end
    for(int i = N - 1; i >= 0; i--)
    {
    
        // Stores the absolute difference
        // between floor and round-off
        // each array element
        bit = Math.Abs((int)Math.Floor(arr[i]) -
                       (int)Math.Round(arr[i]));
    
        // If bit / difference is 1, then
        // calculate the bit by proper
        // power of 2 and add it to result
        if (bit != 0)
            result += (int)Math.Pow(2, power);
    
        // Increment the value of power
        power++;
    }
    
    // Print the result
    Console.WriteLine(result);
}
     
// Driver Code
public static void Main()
{
    double[] arr = { 1.2, 2.6, 4.2, 6.9,
                     3.1, 21.6, 91.2 };
    int N = arr.Length;
     
    findDecimal(arr, N);
}
}
 
// This code is contriobuted by sanjoy_62

Javascript




<script>
 
        // JavaScript program for the above approach
 
        // Function to find the decimal equivalent
        // of the new binary array constructed
        // from absolute decimal of floor and
        // the round-off values
        function findDecimal(arr, N) {
            let bit, power = 0, result = 0;
 
            // Traverse the givenarray from
            // the end
            for (let i = N - 1; i >= 0; i--) {
 
                // Stores the absolute difference
                // between floor and round-off
                // each array element
                bit = Math.abs(Math.floor(arr[i])
                    - Math.round(arr[i]));
 
                // If bit / difference is 1, then
                // calculate the bit by proper
                // power of 2 and add it to result
                if (bit != 0)
                    result += Math.pow(2, power);
 
                // Increment the value of power
                power++;
            }
 
            // Print the result
            document.write(result);
        }
 
        // Driver Code
 
        let arr = [1.2, 2.6, 4.2, 6.9,
            3.1, 21.6, 91.2];
        let N = arr.length;
        findDecimal(arr, N);
 
        // This code is contributed by Hritik
         
</script>
Output: 
42

 

Time Complexity: O(N)  
Auxiliary Space: O(1) 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :