# Check a large number is divisible by 16 or not

Given a number, the task is to check if a number is divisible by 16 or not. The input number may be large and it may not be possible to store even if we use long long int.

Examples:

Input  : n = 1128
Output : No

Input  : n = 11216
Output : Yes

Input  : n = 1124273542764284287
Output : No

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Since input number may be very large, we cannot use n % 16 to check if a number is divisible by 16 or not, especially in languages like C/C++. The idea is based on following fact.

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

Illustration:

For example, let us consider 769616
Number formed by last four digits = 9616
Since 9522 is divisible by 16, answer is YES.

How does this work?

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 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 conributed 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



Output:

No

This article is contributed by Danish_Raza. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details

My Personal Notes arrow_drop_up

Improved By : nitin mittal, jit_t

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.