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)