PAT乙級:1019.數字黑洞 (C)
阿新 • • 發佈:2019-02-05
#include <stdio.h>
#include <stdlib.h>
void getNumberArray(int input[],int number) {
input[0] = number % 10;
number /= 10;
input[1] = number % 10;
number /= 10;
input[2] = number % 10;
number /= 10;
input[3] = number % 10;
}
int getBiggerNumber(int input[])
{
return input[0]*1000 +input[1]*100+input[2]*10+input[3];
}
int getSmallerNumber(int input[])
{
return input[3] * 1000 + input[2] * 100 + input[1] * 10 + input[0];
}
void sortByDesc(int input[])//將int陣列降序排序
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3-i; j++)
{
if (input[j]<input[j+1])
{
int temp = input[j];
input[j] = input[j + 1];
input[j + 1] = temp;
}
}
}
}
int main()
{
int user_input = 0;
scanf("%d", &user_input);
int a[4];
a[0] = user_input % 10;
user_input /= 10;
a[1] = user_input % 10;
user_input /= 10;
a[2] = user_input % 10;
user_input /= 10 ;
a[3] = user_input % 10;
sortByDesc(a);//使陣列a從高到低排序
int bigger = getBiggerNumber(a);//獲取較大的數,即從高到低
int smaller = getSmallerNumber(a);//獲取較小的數,即從低到高
if (bigger==smaller)//如果兩數相等,直接輸出等於0
{
printf("%04d - %04d = %04d", bigger, smaller, 0);
}
else {
while (1)
{
int result = bigger - smaller;
printf("%04d - %04d = %04d\n", bigger, smaller, result);
if (result== 6174)
{
break;
}
else {//只要不等於那個黑洞,繼續取陣列,降序排序,得到兩數,繼續運算、列印
getNumberArray(a, result);
sortByDesc(a);
bigger = getBiggerNumber(a);
smaller = getSmallerNumber(a);
}
}
}
system("pause");//程式暫停,除錯的時候用的,去掉也可以
return 0;
}