卡普雷卡常数

6174 是卡普雷卡常数。这个数字是特殊的,因为当对任何四位数字执行以下步骤时,我们总是会得到这个数字,因此数字的所有数字都不相同,即所有四位数字都不包括(0000、1111,…)

null
  1. 按升序对四位数字进行排序,并将结果存储在数字“asc”中。
  2. 按降序排列四位数字,并将结果存储在数字“desc”中。
  3. 从较小的数字中减去较大的数字,即abs(asc–desc)。
  4. 重复以上三个步骤,直到减法的结果不等于上一个数字。

我们总是以6174结尾。 下面是演示同样的程序。

C++

// C++ program to demonstrate working of
// Kaprekar constant
#include<bits/stdc++.h>
using namespace std;
// This function checks validity of kaprekar's
// constant. It returns kaprekar's constant for
// any four digit number "n" such that all digits
// of n are not same.
int kaprekarRec( int n, int &prev)
{
if (n == 0)
return 0;
// Store current n as previous number
prev = n;
// Get four digits of given number
int digits[4];
for ( int i=0; i<4; i++)
{
digits[i] = n%10;
n = n/10;
}
// Sort all four digits in ascending order
// And giet in the form of number "asc"
sort(digits, digits+4);
int asc = 0;
for ( int i=0; i<4; i++)
asc = asc*10 + digits[i];
// Get all four digits in descending order
// in the form of number "desc"
sort(digits, digits+4, std::greater< int > ());
int desc = 0;
for ( int i=0; i<4; i++)
desc = desc*10 + digits[i];
// Get the difference of two numbers
int diff = abs (asc - desc);
// If difference is same as previous, we have
// reached kaprekar's constant
if (diff == prev)
return diff;
// Else recur
return kaprekarRec(diff, prev);
}
// A wrapper over kaprekarRec()
int kaprekar( int n)
{
int prev = 0;
return kaprekarRec(n, prev);
}
// Driver code
int main()
{
// Trying few four digit numbers, we
// always get 6174
cout << kaprekar(1000) << endl;
cout << kaprekar(1112) << endl;
cout << kaprekar(9812) << endl;
return 0;
}


JAVA

// Java program to demonstrate working of
// Kaprekar constant
import java.util.Arrays;
class GFG{
// This function checks validity of kaprekar's
// constant. It returns kaprekar's constant for
// any four digit number "n" such that all digits
// of n are not same.
static int kaprekarRec( int n, int prev)
{
if (n == 0 )
return 0 ;
// Store current n as previous number
prev = n;
// Get four digits of given number
int [] digits= new int [ 4 ];
for ( int i= 0 ; i< 4 ; i++)
{
digits[i] = n% 10 ;
n = n/ 10 ;
}
// Sort all four digits in ascending order
// And giet in the form of number "asc"
Arrays.sort(digits);
int asc = 0 ;
for ( int i= 0 ; i< 4 ; i++)
asc = asc* 10 + digits[i];
// Get all four digits in descending order
// in the form of number "desc"
Arrays.sort(digits);
int desc = 0 ;
for ( int i= 3 ; i>= 0 ; i--)
desc = desc* 10 + digits[i];
// Get the difference of two numbers
int diff = Math.abs(asc - desc);
// If difference is same as previous, we have
// reached kaprekar's constant
if (diff == prev)
return diff;
// Else recur
return kaprekarRec(diff, prev);
}
// A wrapper over kaprekarRec()
static int kaprekar( int n)
{
int prev = 0 ;
return kaprekarRec(n, prev);
}
// Driver code
public static void main(String[] args)
{
// Trying few four digit numbers, we
// always get 6174
System.out.println(kaprekar( 1000 ));
System.out.println(kaprekar( 1112 ));
System.out.println(kaprekar( 9812 ));
}
}
// This code is contributed by mits


Python3

# Python3 program to demonstrate
# working of Kaprekar constant
# This function checks validity of
# kaprekar's constant. It returns
# kaprekar's constant for any four
# digit number "n" such that all
# digits of n are not same.
def kaprekarRec(n, prev):
if (n = = 0 ):
return 0 ;
# Store current n as previous
# number
prev = n;
# Get four digits of given number
digits = [ 0 ] * 4 ;
for i in range ( 4 ):
digits[i] = n % 10 ;
n = int (n / 10 );
# Sort all four digits in ascending order
# And giet in the form of number "asc"
digits.sort();
asc = 0 ;
for i in range ( 4 ):
asc = asc * 10 + digits[i];
# Get all four digits in descending order
# in the form of number "desc"
digits.sort();
desc = 0 ;
for i in range ( 3 , - 1 , - 1 ):
desc = desc * 10 + digits[i];
# Get the difference of two numbers
diff = abs (asc - desc);
# If difference is same as previous,
# we have reached kaprekar's constant
if (diff = = prev):
return diff;
# Else recur
return kaprekarRec(diff, prev);
# A wrapper over kaprekarRec()
def kaprekar(n):
rev = 0 ;
return kaprekarRec(n, rev);
# Driver code
# Trying few four digit numbers,
# we always get 6174
print (kaprekar( 1000 ));
print (kaprekar( 1112 ));
print (kaprekar( 9812 ));
# This code is contributed by mits.


C#

// C# program to demonstrate working of
// Kaprekar constant
using System;
class GFG{
// This function checks validity of kaprekar's
// constant. It returns kaprekar's constant for
// any four digit number "n" such that all digits
// of n are not same.
static int kaprekarRec( int n, int prev)
{
if (n == 0)
return 0;
// Store current n as previous number
prev = n;
// Get four digits of given number
int [] digits= new int [4];
for ( int i=0; i<4; i++)
{
digits[i] = n%10;
n = n/10;
}
// Sort all four digits in ascending order
// And giet in the form of number "asc"
Array.Sort(digits);
int asc = 0;
for ( int i=0; i<4; i++)
asc = asc*10 + digits[i];
// Get all four digits in descending order
// in the form of number "desc"
Array.Sort(digits);
int desc = 0;
for ( int i=3; i>=0; i--)
desc = desc*10 + digits[i];
// Get the difference of two numbers
int diff = Math.Abs(asc - desc);
// If difference is same as previous, we have
// reached kaprekar's constant
if (diff == prev)
return diff;
// Else recur
return kaprekarRec(diff, prev);
}
// A wrapper over kaprekarRec()
static int kaprekar( int n)
{
int prev = 0;
return kaprekarRec(n, prev);
}
// Driver code
public static void Main()
{
// Trying few four digit numbers, we
// always get 6174
System.Console.WriteLine(kaprekar(1000));
System.Console.WriteLine(kaprekar(1112));
System.Console.WriteLine(kaprekar(9812));
}
}
// This code is contributed by mits


PHP

<?php
// PHP program to demonstrate working of
// Kaprekar constant
// This function checks validity of kaprekar's
// constant. It returns kaprekar's constant
// for any four digit number "n" such that
// all digits of n are not same.
function kaprekarRec( $n , $prev )
{
if ( $n == 0)
return 0;
// Store current n as previous number
$prev = $n ;
// Get four digits of given number
$digits = array_fill (0, 4, 0);
for ( $i = 0; $i < 4; $i ++)
{
$digits [ $i ] = $n % 10;
$n = (int)( $n / 10);
}
// Sort all four digits in ascending order
// And giet in the form of number "asc"
sort( $digits );
$asc = 0;
for ( $i = 0; $i < 4; $i ++)
$asc = $asc * 10 + $digits [ $i ];
// Get all four digits in descending order
// in the form of number "desc"
rsort( $digits );
$desc = 0;
for ( $i = 0; $i < 4; $i ++)
$desc = $desc * 10 + $digits [ $i ];
// Get the difference of two numbers
$diff = abs ( $asc - $desc );
// If difference is same as previous,
// we have reached kaprekar's constant
if ( $diff == $prev )
return $diff ;
// Else recur
return kaprekarRec( $diff , $prev );
}
// A wrapper over kaprekarRec()
function kaprekar( $n )
{
$rev = 0;
return kaprekarRec( $n , $rev );
}
// Driver code
// Trying few four digit numbers, we
// always get 6174
echo kaprekar(1000) . "" ;
echo kaprekar(1112) . "" ;
echo kaprekar(9812) . "" ;
// This code is contributed by mits.
?>


Javascript

<script>
// Javascript program to demonstrate working of
// Kaprekar constant
// This function checks validity of kaprekar's
// constant. It returns kaprekar's constant for
// any four digit number "n" such that all digits
// of n are not same.
function kaprekarRec(n , prev)
{
if (n == 0)
return 0;
// Store current n as previous number
prev = n;
// Get four digits of given number
var digits= Array.from({length: 4}, (_, i) => 0);
for (i=0; i<4; i++)
{
digits[i] = n%10;
n = parseInt(n/10);
}
// Sort all four digits in ascending order
// And giet in the form of number "asc"
digits.sort();
var asc = 0;
for (i=0; i<4; i++)
asc = asc*10 + digits[i];
// Get all four digits in descending order
// in the form of number "desc"
digits.sort();
var desc = 0;
for (i=3; i>=0; i--)
desc = desc*10 + digits[i];
// Get the difference of two numbers
var diff = Math.abs(asc - desc);
// If difference is same as previous, we have
// reached kaprekar's constant
if (diff == prev)
return diff;
// Else recur
return kaprekarRec(diff, prev);
}
// A wrapper over kaprekarRec()
function kaprekar(n)
{
var prev = 0;
return kaprekarRec(n, prev);
}
// Driver code
//Trying few four digit numbers, we
// always get 6174
document.write(kaprekar(1000)+ "<br>" );
document.write(kaprekar(1112)+ "<br>" );
document.write(kaprekar(9812)+ "<br>" );
// This code contributed by Princi Singh
</script>


输出:

6174
6174
6174

插图:

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.

参考: https://en.wikipedia.org/wiki/6174_(数字) 相关文章: 卡普雷卡数 本文由 高拉夫·萨克塞纳 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享