1. 程式人生 > >PAT乙級:1019.數字黑洞 (C)

PAT乙級:1019.數字黑洞 (C)

這裡寫圖片描述

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