Dado un número n, escribe una función que devuelva verdadero si n es divisible por 9, de lo contrario, falso. La forma más sencilla de verificar la divisibilidad de n entre 9 es hacer n%9.
Otro método es sumar los dígitos de n. Si la suma de dígitos es múltiplo de 9, entonces n es múltiplo de 9.
Los métodos anteriores no son métodos basados en operadores bit a bit y requieren el uso de % y /.
Los operadores bit a bit son generalmente más rápidos que los operadores de módulo y división. El siguiente es un método basado en un operador bit a bit para verificar la divisibilidad por 9.
C++
// C++ program to check if a number // is multiple of 9 using bitwise operators #include <bits/stdc++.h> using namespace std; // Bitwise operator based function to check divisibility by 9 bool isDivBy9(int n) { // Base cases if (n == 0 || n == 9) return true; if (n < 9) return false; // If n is greater than 9, then recur for [floor(n/9) - n%8] return isDivBy9((int)(n >> 3) - (int)(n & 7)); } // Driver program to test above function int main() { // Let us print all multiples of 9 from 0 to 100 // using above method for (int i = 0; i < 100; i++) if (isDivBy9(i)) cout << i << " "; return 0; }
Java
// Java program to check if a number // is multiple of 9 using bitwise operators import java.lang.*; class GFG { // Bitwise operator based function // to check divisibility by 9 static boolean isDivBy9(int n) { // Base cases if (n == 0 || n == 9) return true; if (n < 9) return false; // If n is greater than 9, then // recur for [floor(n/9) - n%8] return isDivBy9((int)(n >> 3) - (int)(n & 7)); } // Driver code public static void main(String arg[]) { // Let us print all multiples of 9 from // 0 to 100 using above method for (int i = 0; i < 100; i++) if (isDivBy9(i)) System.out.print(i + " "); } } // This code is contributed by Anant Agarwal.
Python3
# Bitwise operator based # function to check divisibility by 9 def isDivBy9(n): # Base cases if (n == 0 or n == 9): return True if (n < 9): return False # If n is greater than 9, # then recur for [floor(n / 9) - n % 8] return isDivBy9((int)(n>>3) - (int)(n&7)) # Driver code # Let us print all multiples # of 9 from 0 to 100 # using above method for i in range(100): if (isDivBy9(i)): print(i, " ", end ="") # This code is contributed # by Anant Agarwal.
C#
// C# program to check if a number // is multiple of 9 using bitwise operators using System; class GFG { // Bitwise operator based function // to check divisibility by 9 static bool isDivBy9(int n) { // Base cases if (n == 0 || n == 9) return true; if (n < 9) return false; // If n is greater than 9, then // recur for [floor(n/9) - n%8] return isDivBy9((int)(n >> 3) - (int)(n & 7)); } // Driver code public static void Main() { // Let us print all multiples of 9 from // 0 to 100 using above method for (int i = 0; i < 100; i++) if (isDivBy9(i)) Console.Write(i + " "); } } // This code is contributed by nitin mittal.
PHP
<?php // PHP program to check if a number // is multiple of 9 using bitwise // operators // Bitwise operator based function // to check divisibility by 9 function isDivBy9($n) { // Base cases if ($n == 0 || $n == 9) return true; if ($n < 9) return false; // If n is greater than 9, // then recur for [floor(n/9) - // n%8] return isDivBy9(($n >> 3) - ($n & 7)); } // Driver Code // Let us print all multiples // of 9 from 0 to 100 // using above method for ($i = 0; $i < 100; $i++) if (isDivBy9($i)) echo $i ," "; // This code is contributed by nitin mittal ?>
Javascript
<script> // javascript program to check if a number // is multiple of 9 using bitwise operators // Bitwise operator based function // to check divisibility by 9 function isDivBy9(n) { // Base cases if (n == 0 || n == 9) return true; if (n < 9) return false; // If n is greater than 9, then // recur for [floor(n/9) - n%8] return isDivBy9(parseInt(n >> 3) - parseInt(n & 7)); } // Driver code // Let us print all multiples of 9 from // 0 to 100 using above method for (i = 0; i < 100; i++) if (isDivBy9(i)) document.write(i + " "); // This code is contributed by Princi Singh </script>
Producción:
0 9 18 27 36 45 54 63 72 81 90 99
Complejidad de tiempo: O (log n)
Espacio auxiliar: O(logn)
¿Cómo funciona esto?
n/9 se puede escribir en términos de n/8 usando la siguiente fórmula simple.
n/9 = n/8 - n/72
Como necesitamos usar operadores bit a bit, obtenemos el valor de floor(n/8) usando n>>3 y obtenemos el valor de n%8 usando n&7 . Necesitamos escribir la expresión anterior en términos de floor(n/8) y n%8 .
n/8 es igual a “piso(n/8) + (n%8)/8” . Escribamos la expresión anterior en términos de piso (n/8) y n%8
n/9 = floor(n/8) + (n%8)/8 - [floor(n/8) + (n%8)/8]/9 n/9 = floor(n/8) - [floor(n/8) - 9(n%8)/8 + (n%8)/8]/9 n/9 = floor(n/8) - [floor(n/8) - n%8]/9
De la ecuación anterior, n es un múltiplo de 9 solo si la expresión piso (n/8) – [piso (n/8) – n%8]/9 es un número entero. Esta expresión solo puede ser un número entero si la subexpresión [piso(n/8) – n%8]/9 es un número entero. La subexpresión solo puede ser un número entero si [floor(n/8) – n%8] es un múltiplo de 9 . Entonces, el problema se reduce a un valor más pequeño que se puede escribir en términos de operadores bit a bit.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA