6174 是卡普雷卡常数。这个数字是特殊的,因为当对任何四位数字执行以下步骤时,我们总是会得到这个数字,因此数字的所有数字都不相同,即所有四位数字都不包括(0000、1111,…)
null
- 按升序对四位数字进行排序,并将结果存储在数字“asc”中。
- 按降序排列四位数字,并将结果存储在数字“desc”中。
- 从较小的数字中减去较大的数字,即abs(asc–desc)。
- 重复以上三个步骤,直到减法的结果不等于上一个数字。
我们总是以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