PAT乙级:1019.数字黑洞 (C)

PAT乙级:1019.数字黑洞 (C)_第1张图片


#include 
#include 


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]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;
}

你可能感兴趣的:(C,Algorithm)