Related Articles
Check a large number is divisible by 16 or not
• Difficulty Level : Easy
• Last Updated : 29 Apr, 2021

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

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

 ``

## Javascript

 ``

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 write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.