Comprobar que un número grande es divisible por 16 o no

Dado un número, la tarea es verificar si un número es divisible por 16 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 : No

Input  : n = 11216
Output : Yes

Input  : n = 1124273542764284287
Output : No

Dado que el número de entrada puede ser muy grande, no podemos usar n % 16 para verificar si un número es divisible por 16 o no, especialmente en lenguajes como C/C++. La idea se basa en el siguiente hecho. 

A number is divisible by 16 if number formed 
by last four digits of it is divisible by 16.

Ilustración: 

For example, let us consider 769616 
Number formed by last four digits = 9616
Since 9522 is divisible by 16, 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 16 is 0 if i greater 
than or equal to four. Note that 10000, 
100000,... etc lead to remainder 0 when divided by 16.

So remainder of "7*10000 + 6*1000 + 9*100 + 
5*10 + 2" divided by 16 is equivalent to remainder 
of following : 
0 + 6*1000 + 9*100 + 5*10 + 2 = 6952
Therefore we can say that the whole number is 
divisible by 16 if 6952 is divisible by 16.

C++

// C++ program to find if a number
// is divisible by 16 or not
#include<bits/stdc++.h>
using namespace std;
 
// Function to find that
// number divisible by 16 or not
bool check(string str)
{
    int n = str.length();
 
    // Empty string
    if (n == 0 && n == 1)
        return false;
 
    // If there is double digit
    if (n == 2)
        return (((str[n-2]-'0')*10 +
                 (str[n-1]-'0'))%16 == 0);
 
    // If there is triple digit
    if(n == 3)
         return ( ((str[n-3]-'0')*100 +
                   (str[n-2]-'0')*10 +
                   (str[n-1]-'0'))%16 == 0);
 
 
    // If number formed by last four
    // digits is divisible by 16.
    int last = str[n-1] - '0';
    int second_last = str[n-2] - '0';
    int third_last = str[n-3] - '0';
    int fourth_last = str[n-4] - '0';
    return ((fourth_last*1000 + third_last*100 +
             second_last*10 + last) % 16 == 0);
}
 
// Driver code
int main()
{
    string str = "769528";
    check(str)?  cout << "Yes" : cout << "No ";
    return 0;
}

Java

// Java program to find if a number
// is divisible by 16 or not
import java.io.*;
 
class GFG {
    // Function to find that
    // number divisible by 16 or not
    static boolean check(String str)
    {
        int n = str.length();
      
        // Empty string
        if (n == 0 && n == 1)
            return false;
      
        // If there is double digit
        if (n == 2)
            return (((str.charAt(n-2)-'0')*10 +
                     (str.charAt(n-1)-'0'))%16 == 0);
      
        // If there is triple digit
        if(n == 3)
             return ( ((str.charAt(n-3)-'0')*100 +
                       (str.charAt(n-2)-'0')*10 +
                       (str.charAt(n-1)-'0'))%16 == 0);
      
      
        // If number formed by last
        // four digits is divisible by 16.
        int last = str.charAt(n-1) - '0';
        int second_last = str.charAt(n-2) - '0';
        int third_last = str.charAt(n-3) - '0';
        int fourth_last = str.charAt(n-4) - '0';
        return ((fourth_last*1000 + third_last*100
                + second_last*10 + last) % 16 == 0);
    }
      
    // Driver code
    public static void main(String args[])
    {
        String str = "769528";
        if(check(str))
            System.out.println("Yes");
        else
            System.out.println("No ");
    }
}
 
// This code is contributed by Nikita Tiwari.

Python3

# Python 3 program to find
# if a number is divisible
# by 16 or not
 
# Function to find that
# number divisible by
# 16 or not
def check(st) :
    n = len(st)
     
    # Empty string
    if (n == 0 and n == 1) :
        return False
  
    # If there is double digit
    if (n == 2) :
        return ((int)(st[n-2])*10 +
                ((int)(st[n-1])%16 == 0))
  
    # If there is triple digit
    if(n == 3) :
        return ( ((int)(st[n-3])*100 +
                   (int)(st[n-2])*10 +
                   (int)(st[n-1]))%16 == 0)
  
  
    # If number formed by last
    # four digits is divisible
    # by 16.
    last = (int)(st[n-1])
    second_last = (int)(st[n-2])
    third_last = (int)(st[n-3])
    fourth_last = (int)(st[n-4])
    return ((fourth_last*1000 + third_last*100
            + second_last*10 + last) % 16 == 0)
 
 
# Driver code
st = "769528"
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 16 or not
using System;
 
class GFG {
     
    // Function to find that number
    // divisible by 16 or not
    static bool check(String str)
    {
        int n = str.Length;
     
        // Empty string
        if (n == 0 && n == 1)
            return false;
     
        // If there is double digit
        if (n == 2)
            return (((str[n - 2] - '0') * 10 +
                (str[n - 1] - '0')) % 16 == 0);
     
        // If there is triple digit
        if(n == 3)
            return (((str[n - 3] - '0') * 100 +
                     (str[n - 2] - '0') * 10 +
                     (str[n - 1] - '0')) % 16 == 0);
     
     
        // If number formed by last
        // four digits is divisible by 16.
        int last = str[n - 1] - '0';
        int second_last = str[n - 2] - '0';
        int third_last = str[n - 3] - '0';
        int fourth_last = str[n - 4] - '0';
        return ((fourth_last * 1000 + third_last * 100
            + second_last * 10 + last) % 16 == 0);
    }
     
    // Driver code
    public static void Main()
    {
        String str = "769528";
        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 16 or not
 
// Function to find that
// number divisible by 16 or not
function check($str)
{
    $n = strlen($str);
 
    // Empty string
    if ($n == 0 && $n == 1)
        return false;
 
    // If there is double digit
    if ($n == 2)
        return ((($str[$n - 2] - '0') * 10 +
                 ($str[$n - 1] - '0')) % 16 == 0);
 
    // If there is triple digit
    if($n == 3)
        return ((($str[$n -3] - '0') *
                  100 + ($str[$n - 2] -
                  '0') * 10 + ($str[$n -
                  1] - '0')) % 16 == 0);
 
 
    // If number formed by last four
    // digits is divisible by 16.
    $last = $str[$n - 1] - '0';
    $second_last = $str[$n - 2] - '0';
    $third_last = $str[$n - 3] - '0';
    $fourth_last = $str[$n - 4] - '0';
    return (($fourth_last * 1000 +
             $third_last * 100 +
             $second_last * 10 +
             $last) % 16 == 0);
}
 
// Driver code
$str = "769528";
$x = check($str) ? "Yes" : "No ";
echo($x);
 
// This code is contributed by Ajit.
?>

Javascript

<script>
 
// Javascript program to find if a number
// is divisible by 16 or not
 
// Function to find that number
// divisible by 16 or not
function check(str)
{
    let n = str.length;
   
    // Empty string
    if (n == 0 && n == 1)
        return false;
   
    // If there is double digit
    if (n == 2)
        return (((str[n - 2] - '0') * 10 +
                 (str[n - 1] - '0')) % 16 == 0);
   
    // If there is triple digit
    if(n == 3)
        return (((str[n - 3] - '0') * 100 +
                 (str[n - 2] - '0') * 10 +
                 (str[n - 1] - '0')) % 16 == 0);
   
    // If number formed by last
    // four digits is divisible by 16.
    let last = str[n - 1] - '0';
    let second_last = str[n - 2] - '0';
    let third_last = str[n - 3] - '0';
    let fourth_last = str[n - 4] - '0';
     
    return ((fourth_last * 1000 + third_last * 100 +
             second_last * 10 + last) % 16 == 0);
}
 
// Driver code
let str = "769528";
 
if (check(str))
    document.write("Yes");
else
    document.write("No ");
     
// This code is contributed by decode2207
 
</script>

Producción: 

No

Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *