Redondear al siguiente múltiplo menor de 8

Dado un entero sin signo x. Redondee hacia abajo al siguiente múltiplo más pequeño de 8 usando solo operaciones bit a bit.
Ejemplos: 
 

Input : 35
Output : 32

Input : 40
Output : 40 
As 40 is already a multiple of 8. So, no 
modification is done.

Solución 1: Un enfoque ingenuo para resolver este problema usando operadores aritméticos es: 
Sea x el número entonces, 
x = x – (x % 8) 
Esto redondeará x al siguiente múltiplo menor de 8. Pero no se nos permite utilizar operadores aritméticos.
Solución 2: Un enfoque eficiente para resolver este problema usando la operación AND bit a bit es: x = x & (-8) 
Esto redondeará x al siguiente múltiplo más pequeño de 8. La idea se basa en el hecho de que los últimos tres bits en un múltiplo de 8 debe ser 0, a
continuación se muestra la implementación de la idea anterior:
 

C++

// CPP program to find next smaller
// multiple of 8.
#include <bits/stdc++.h>
using namespace std;
 
int RoundDown(int& a)
{
    return a & (-8);
}
 
int main()
{
    int x = 39;
    cout << RoundDown(x);
    return 0;
}

Java

//Java program to find next smaller
// multiple of 8.
 
import java.io.*;
 
class GFG {
static int RoundDown(int a)
{
    return a & (-8);
}
 
    public static void main (String[] args) {
 
    int x = 39;
    System.out.println (RoundDown(x));
    }
}
//This Code is Contributed by ajit

Python3

# Python 3 program to find next
# smaller multiple of 8.
 
def RoundDown(a):
    return a & (-8)
 
# Driver Code
if __name__ == '__main__':
    x = 39
    print(RoundDown(x))
 
# This code is contributed
# by Surendra_Gangwar

C#

// C# program to find next smaller
// multiple of 8.
using System;
 
class GFG
{
static int RoundDown(int a)
{
    return a & (-8);
}
 
public static void Main()
{
    int x = 39;
    Console.Write(RoundDown(x));
}
}
 
// This code is contributed
// by Akanksha Rai

PHP

<?php
// PHP program to find next smaller
// multiple of 8.
 
function RoundDown($a)
{
    return ($a & (-8));
}
 
// Driver Code
$x = 39;
echo RoundDown($x);
 
// This code is contributed by jit_t
?>

Javascript

<script>
    // Javascript program to find next smaller multiple of 8.
     
    function RoundDown(a)
    {
        return a & (-8);
    }
     
    let x = 39;
    document.write(RoundDown(x));
 
</script>
Producción

32

Complejidad de tiempo: La complejidad de tiempo de este enfoque es O(1) 
Espacio auxiliar: La complejidad de espacio de este enfoque es O(1)

 Otro enfoque : usar operadores de cambio 
Para obtener el siguiente múltiplo más pequeño de 8, podemos dividir el número por 8 y luego multiplicarlo por 8.
Esto se puede lograr usando los operadores de cambio como se muestra a continuación:
 

C++

// CPP program to find next smaller
// multiple of 8.
#include <bits/stdc++.h>
using namespace std;
  
int RoundDown(int& a)
{
    //Using >> 3 divides the number by 2 power 3
    //or 8, and << 3 reverses it, by multiplying
    //the result by 8
    return (a >> 3) << 3;
}
 
int main()
{
    int x = 39;
    cout << RoundDown(x) << endl;
    return 0;
}
 
 
//This code is contributed by phasing17

Javascript

// JavaScript program to find next smaller
// multiple of 8.
function RoundDown(a)
{
    // Using >> 3 divides the number by 2 power 3
    // or 8, and << 3 reverses it, by multiplying
    // the result by 8
    return (a >> 3) << 3;
}
 
// Driver Code
let x = 39;
console.log(RoundDown(x));
 
 
//This code is contributed by phasing17
Producción

32

Complejidad temporal : O(1) 
Espacio auxiliar:  O(1)

Publicación traducida automáticamente

Artículo escrito por Shubham__Ranjan 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 *