Software & Finance





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