C Programming (Turbo C++ Compiler) - Kaprekar Transformation 3 Digit Number ends with 495
The source code for Kaprekar Transformation is given in C Language. You will notice that always the result will end with 495.
Source Code
#include <stdio.h>
#include <string.h>
int ComputeAndPrint(int num)
{
int a1, a2, a3;
int d1, d2, d3;
int big, small, diff;
int digit1 = num / 100; // MSB
int digit2 = (num - digit1 * 100) / 10;
int digit3 = (num % 10); // LSB
if(digit1 > digit2)
{
if(digit1 > digit3)
{
d1 = digit1;
if(digit2 > digit3)
{
d2 = digit2;
d3 = digit3;
}
else
{
d3 = digit2;
d2 = digit3;
}
}
else
{
d1 = digit3;
d2 = digit1;
d3 = digit2;
}
}
else
{
if(digit2 > digit3)
{
d1 = digit2;
if(digit1 > digit3)
{
d2 = digit1;
d3 = digit3;
}
else
{
d3 = digit1;
d2 = digit3;
}
}
else
{
d1 = digit3;
d2 = digit2;
d3 = digit1;
}
}
if(digit1 < digit2)
{
if(digit1 < digit3)
{
a1 = digit1;
if(digit2 < digit3)
{
a2 = digit2;
a3 = digit3;
}
else
{
a3 = digit2;
a2 = digit3;
}
}
else
{
a1 = digit3;
a2 = digit1;
a3 = digit2;
}
}
else
{
if(digit2 < digit3)
{
a1 = digit2;
if(digit1 < digit3)
{
a2 = digit1;
a3 = digit3;
}
else
{
a3 = digit1;
a2 = digit3;
}
}
else
{
a1 = digit3;
a2 = digit2;
a3 = digit1;
}
}
big = d1 * 100 + d2 * 10 + d3;
small = a1 * 100 + a2 * 10 + a3;
diff = big - small;
printf("%d - %d = %d\n", big,small, diff);
return diff;
}
int main(int argc, char* argv[])
{
int num = 0, nextnum = 0;
int digit1, digit2, digit3;
if(argc < 2 ||
strlen(argv[1]) != 3)
{
printf("3digit.exe <3 digit number>\n");
exit(0);
}
num = atoi(argv[1]);
if(num < 0 || num > 999)
{
printf("Not a valid number\n");
exit(0);
}
digit1 = num / 100; // MSB
digit2 = (num - digit1 * 100) / 10;
digit3 = (num % 10); // LSB
if(digit1 == digit2 && digit1 == digit3)
{
printf("All digits should not be equal\n");
exit(0);
}
while(1)
{
nextnum = ComputeAndPrint(num);
if(num == nextnum)
break;
num = nextnum;
}
return 0;
}
Output
3digit.exe 812
821 - 128 = 693
963 - 369 = 594
954 - 459 = 495
954 - 459 = 495
3digit.exe 576
765 - 567 = 198
981 - 189 = 792
972 - 279 = 693
963 - 369 = 594
954 - 459 = 495
954 - 459 = 495
3digit.exe 417
741 - 147 = 594
954 - 459 = 495
954 - 459 = 495
|