6174 is the Kaprekar Constant. This number is special as we always get this number when following steps are followed for any four digit number such that all digits of number are not same, i.e., all four digit numbers excluding (0000, 1111, …)
- Sort four digits in ascending order and store result in a number “asc”.
- Sort four digits in descending order and store result in a number “desc”.
- Subtract number larger number from smaller number, i.e., abs(asc – desc).
- Repeat above three steps until the result of subtraction doesn’t become equal to the previous number.
- We always end up with 6174.
Below is the implementation of the above approach:
C++
#include<bits/stdc++.h>
using namespace std;
int kaprekarRec( int n, int &prev)
{
if (n == 0)
return 0;
prev = n;
int digits[4];
for ( int i=0; i<4; i++)
{
digits[i] = n%10;
n = n/10;
}
sort(digits, digits+4);
int asc = 0;
for ( int i=0; i<4; i++)
asc = asc*10 + digits[i];
sort(digits, digits+4, std::greater< int > ());
int desc = 0;
for ( int i=0; i<4; i++)
desc = desc*10 + digits[i];
int diff = abs (asc - desc);
if (diff == prev)
return diff;
return kaprekarRec(diff, prev);
}
int kaprekar( int n)
{
int prev = 0;
return kaprekarRec(n, prev);
}
int main()
{
cout << kaprekar(1000) << endl;
cout << kaprekar(1112) << endl;
cout << kaprekar(9812) << endl;
return 0;
}
|
Java
import java.util.Arrays;
class GFG{
static int kaprekarRec( int n, int prev)
{
if (n == 0 )
return 0 ;
prev = n;
int [] digits= new int [ 4 ];
for ( int i= 0 ; i< 4 ; i++)
{
digits[i] = n% 10 ;
n = n/ 10 ;
}
Arrays.sort(digits);
int asc = 0 ;
for ( int i= 0 ; i< 4 ; i++)
asc = asc* 10 + digits[i];
Arrays.sort(digits);
int desc = 0 ;
for ( int i= 3 ; i>= 0 ; i--)
desc = desc* 10 + digits[i];
int diff = Math.abs(asc - desc);
if (diff == prev)
return diff;
return kaprekarRec(diff, prev);
}
static int kaprekar( int n)
{
int prev = 0 ;
return kaprekarRec(n, prev);
}
public static void main(String[] args)
{
System.out.println(kaprekar( 1000 ));
System.out.println(kaprekar( 1112 ));
System.out.println(kaprekar( 9812 ));
}
}
|
Python3
def kaprekarRec(n, prev):
if (n = = 0 ):
return 0 ;
prev = n;
digits = [ 0 ] * 4 ;
for i in range ( 4 ):
digits[i] = n % 10 ;
n = int (n / 10 );
digits.sort();
asc = 0 ;
for i in range ( 4 ):
asc = asc * 10 + digits[i];
digits.sort();
desc = 0 ;
for i in range ( 3 , - 1 , - 1 ):
desc = desc * 10 + digits[i];
diff = abs (asc - desc);
if (diff = = prev):
return diff;
return kaprekarRec(diff, prev);
def kaprekar(n):
rev = 0 ;
return kaprekarRec(n, rev);
print (kaprekar( 1000 ));
print (kaprekar( 1112 ));
print (kaprekar( 9812 ));
|
C#
using System;
class GFG{
static int kaprekarRec( int n, int prev)
{
if (n == 0)
return 0;
prev = n;
int [] digits= new int [4];
for ( int i=0; i<4; i++)
{
digits[i] = n%10;
n = n/10;
}
Array.Sort(digits);
int asc = 0;
for ( int i=0; i<4; i++)
asc = asc*10 + digits[i];
Array.Sort(digits);
int desc = 0;
for ( int i=3; i>=0; i--)
desc = desc*10 + digits[i];
int diff = Math.Abs(asc - desc);
if (diff == prev)
return diff;
return kaprekarRec(diff, prev);
}
static int kaprekar( int n)
{
int prev = 0;
return kaprekarRec(n, prev);
}
public static void Main()
{
System.Console.WriteLine(kaprekar(1000));
System.Console.WriteLine(kaprekar(1112));
System.Console.WriteLine(kaprekar(9812));
}
}
|
PHP
<?php
function kaprekarRec( $n , $prev )
{
if ( $n == 0)
return 0;
$prev = $n ;
$digits = array_fill (0, 4, 0);
for ( $i = 0; $i < 4; $i ++)
{
$digits [ $i ] = $n % 10;
$n = (int)( $n / 10);
}
sort( $digits );
$asc = 0;
for ( $i = 0; $i < 4; $i ++)
$asc = $asc * 10 + $digits [ $i ];
rsort( $digits );
$desc = 0;
for ( $i = 0; $i < 4; $i ++)
$desc = $desc * 10 + $digits [ $i ];
$diff = abs ( $asc - $desc );
if ( $diff == $prev )
return $diff ;
return kaprekarRec( $diff , $prev );
}
function kaprekar( $n )
{
$rev = 0;
return kaprekarRec( $n , $rev );
}
echo kaprekar(1000) . "\n" ;
echo kaprekar(1112) . "\n" ;
echo kaprekar(9812) . "\n" ;
?>
|
Javascript
<script>
function kaprekarRec(n , prev)
{
if (n == 0)
return 0;
prev = n;
var digits= Array.from({length: 4}, (_, i) => 0);
for (i=0; i<4; i++)
{
digits[i] = n%10;
n = parseInt(n/10);
}
digits.sort();
var asc = 0;
for (i=0; i<4; i++)
asc = asc*10 + digits[i];
digits.sort();
var desc = 0;
for (i=3; i>=0; i--)
desc = desc*10 + digits[i];
var diff = Math.abs(asc - desc);
if (diff == prev)
return diff;
return kaprekarRec(diff, prev);
}
function kaprekar(n)
{
var prev = 0;
return kaprekarRec(n, prev);
}
document.write(kaprekar(1000)+ "<br>" );
document.write(kaprekar(1112)+ "<br>" );
document.write(kaprekar(9812)+ "<br>" );
</script>
|
Illustration :
n = 2324
1) asc = 2234
2) desc = 4322
3) Difference = 2088
4) Repeating above steps as difference is not same
as n
n = 2088
1) asc = 0288
2) desc = 8820
3) Difference = 8532
4) Repeating above steps as difference is not same
as n.
n = 8532
1) asc = 2358
2) desc = 8532
3) Difference = 6174
4) Repeating above steps as difference is not same
as n.
n = 6174
1) asc = 1467
2) desc = 7641
3) Difference = 6174
Stopping here as difference is same as n.
Time Complexity: O(n log n) where n is the number of digits.
Auxiliary Space: O(1)
Reference:
https://en.wikipedia.org/wiki/6174_(number)
Related Article:
Kaprekar Number
Last Updated :
23 Nov, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...