Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdbool.h>
- void sort(int arr[], int n, bool reverse){
- int i, j, key;
- if(reverse==true){
- for(i=1;i<n;i++){
- key=arr[i];
- j=i-1;
- while(j>=0&&arr[j]<key){
- arr[j+1] = arr[j];
- j--;
- }
- arr[j+1]=key;
- }
- } else {
- for(i=1;i<n;i++){
- key=arr[i];
- j=i-1;
- while(j>=0&&arr[j]>key){
- arr[j+1] = arr[j];
- j--;
- }
- arr[j+1]=key;
- }
- }
- }
- int kaprekar_routine(int n, int diff){
- if((1000>=n||n>=9999)&&(n!=0)){printf("Number should be only 4 digits"); return 0;}
- int arr[4], arr_res[2], i=0, largest=0, smallest=0, ldiff;
- static int res, steps=0;
- while(n>0){
- arr[i] = n%10;
- i++;
- n /= 10;
- }
- sort(arr, 4, false);
- for(i=0; i<4; i++){
- smallest *= 10;
- smallest += arr[i];
- }
- sort(arr, 4, true);
- for(i=0; i<4; i++){
- largest *= 10;
- largest += arr[i];
- }
- ldiff = largest-smallest;
- steps++;
- if((ldiff==diff)&&(ldiff!=0)){
- return steps;
- } else if(ldiff==0){
- return 0;
- } else {
- return kaprekar_routine(ldiff, ldiff);
- }
- }
- int main(){
- int overall_steps = kaprekar_routine(3456, 0);
- printf("The Kaprekar Routine happened for %d steps", overall_steps);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement