メモ

カプレカ数

#include

int kap(int n){
int i, j, tmp, max, min, num[4];

// 各桁の値を行列に格納
num[0] = n /1000;
n %= 1000;
num[1] = n / 100;
n %= 100;
num[2] = n /10;
n %= 10;
num[3] = n;

// 行列を昇順に並べ替える
for(i = 0; i < 3; i++){
for(j = i; j < 4; j++){
if(num[i] < num[j]){
tmp = num[i];
num[i] = num[j];
num[j] = tmp;
}
}
}

max = num[0] * 1000 + num[1] * 100 + num [2] * 10 + num[3];
min = num[3] * 1000 + num[2] * 100 + num [1] * 10 + num[0];

return max - min;
}

int main(void){
int n, i = 0;

printf("学籍番号: ");
scanf("%d", &n);

// 入力値チェック
if(n < 0 || 9999 < n || (n % 1111 == 0)){
printf("エラーです!\n");
return 0;
}

while(n != kap(n)){
n = kap(n);
i++;
}

printf("反復回数:%d カプレカ数:%d\n", i + 1, n);

return 0;
}