Dado un número, la tarea es verificar si un número es divisible por 8 o no. El número de entrada puede ser grande y puede que no sea posible almacenarlo incluso si usamos long long int.
Ejemplos:
Input : n = 1128 Output : Yes Input : n = 1124 Output : No Input : n = 363588395960667043875487 Output : No
Dado que el número de entrada puede ser muy grande, no podemos usar n % 8 para verificar si un número es divisible por 8 o no, especialmente en lenguajes como C/C++. La idea se basa en el siguiente hecho.
Un número es divisible por 8 si el número formado por sus tres últimas cifras es divisible por 8.
Ilustración:
For example, let us consider 76952 Number formed by last three digits = 952 Since 952 is divisible by 8, answer is YES.
¿Como funciona esto?
Let us consider 76952, we can write it as 76942 = 7*10000 + 6*1000 + 9*100 + 5*10 + 2 The proof is based on below observation: Remainder of 10i divided by 8 is 0 if i greater than or equal to three. Note than 10000, 1000,... etc lead to remainder 0 when divided by 8. So remainder of "7*10000 + 6*1000 + 9*100 + 5*10 + 2" divided by 8 is equivalent to remainder of following : 0 + 0 + 9*100 + 5*10 + 2 = 52 Therefore we can say that the whole number is divisible by 8 if 952 is divisible by 8.
A continuación se muestra la implementación del hecho anterior:
C++
// C++ program to find if a number is divisible by // 8 or not #include<bits/stdc++.h> using namespace std; // Function to find that number divisible by // 8 or not bool check(string str) { int n = str.length(); // Empty string if (n == 0) return false; // If there is single digit if (n == 1) return ((str[0]-'0')%8 == 0); // If there is double digit if (n == 2) return (((str[n-2]-'0')*10 + (str[n-1]-'0'))%8 == 0); // If number formed by last three digits is // divisible by 8. int last = str[n-1] - '0'; int second_last = str[n-2] - '0'; int third_last = str[n-3] - '0'; return ((third_last*100 + second_last*10 + last) % 8 == 0); } // Driver code int main() { string str = "76952"; check(str)? cout << "Yes" : cout << "No "; return 0; }
Java
// Java program to find if a number is // divisible by 8 or not class IsDivisible { // Function to find that number divisible by // 8 or not static boolean check(String str) { int n = str.length(); // Empty string if (n == 0) return false; // If there is single digit if (n == 1) return ((str.charAt(0)-'0')%8 == 0); // If there is double digit if (n == 2) return (((str.charAt(n-2)-'0')*10 + (str.charAt(n-1)-'0'))%8 == 0); // If number formed by last three digits is // divisible by 8. int last = str.charAt(n-1) - '0'; int second_last = str.charAt(n-2) - '0'; int third_last = str.charAt(n-3) - '0'; return ((third_last*100 + second_last*10 + last) % 8 == 0); } // main function public static void main (String[] args) { String str = "76952"; if(check(str)) System.out.println("Yes"); else System.out.println("No"); } }
Python3
# Python 3 program to find # if a number is divisible # by 8 or not # Function to find that # number divisible by 8 # or not def check(st) : n = len(st) # Empty string if (n == 0) : return False # If there is single digit if (n == 1) : return ((int)(st[0]) % 8 == 0) # If there is double digit if (n == 2) : return ((int)(st[n - 2]) * 10 + ((int)(str[n - 1]) % 8 == 0)) # If number formed by last # three digits is divisible # by 8. last = (int)(st[n - 1]) second_last = (int)(st[n - 2]) third_last = (int)(st[n - 3]) return ((third_last*100 + second_last*10 + last) % 8 == 0) # Driver code st = "76952" if(check(st)) : print("Yes") else : print("No ") # This code is contributed by Nikita tiwari
C#
// C# program to find if a number // is divisible by 8 or not using System; class IsDivisible { // Function to find that number // divisible by 8 or not static bool check(String str) { int n = str.Length; // Empty string if (n == 0) return false; // If there is single digit if (n == 1) return ((str[0] - '0') %8 == 0); // If there is double digit if (n == 2) return (((str[n - 2] - '0') * 10 + (str[n - 1] - '0')) % 8 == 0); // If number formed by last three // digits is divisible by 8 int last = str[n - 1] - '0'; int second_last = str[n - 2] - '0'; int third_last = str[n - 3] - '0'; return ((third_last * 100 + second_last * 10 + last) % 8 == 0); } // Driver Code public static void Main () { String str = "76952"; if(check(str)) Console.Write("Yes"); else Console.Write("No"); } } // This Code is contributed by Nitin Mittal.
PHP
<?php // PHP program to find if a number // is divisible by 8 or not // Function to find that number // divisible by 8 or not function check($str) { $n = strlen($str); // Empty string if ($n == 0) return false; // If there is single digit if ($n == 1) return (($str[0] - '0') % 8 == 0); // If there is double digit if ($n == 2) return ((($str[$n - 2] - '0') * 10 + ($str[$n - 1] - '0')) % 8 == 0); // If number formed by last three // digits is divisible by 8. $last = $str[$n - 1] - '0'; $second_last = $str[$n - 2] - '0'; $third_last = $str[$n - 3] - '0'; return (($third_last * 100 + $second_last * 10 + $last) % 8 == 0); } // Driver code $str = "76952"; $x = check($str)? "Yes" : "No "; echo($x); // This code is contributed by Ajit. ?>
Javascript
<script> // JavaScript program for the above approach // Function to find that number // divisible by 8 or not function check(str) { let n = str.length; // Empty string if (n == 0) return false; // If there is single digit if (n == 1) return ((str[0] - '0') %8 == 0); // If there is double digit if (n == 2) return (((str[n - 2] - '0') * 10 + (str[n - 1] - '0')) % 8 == 0); // If number formed by last three // digits is divisible by 8 let last = str[n - 1] - '0'; let second_last = str[n - 2] - '0'; let third_last = str[n - 3] - '0'; return ((third_last * 100 + second_last * 10 + last) % 8 == 0); } // Driver Code let str = "76952"; if(check(str)) document.write("Yes"); else document.write("No"); // This code is contributed by splevel62. </script>
Producción:
Yes
Complejidad de tiempo : O (1), ya que no estamos usando ningún bucle para atravesar.
Espacio auxiliar: O(1), ya que no estamos utilizando ningún espacio adicional.
Este artículo es una contribución de DANISH_RAZA . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
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