PAT_B_1019 數字黑洞

題目描述:測試

給定任一個各位數字不徹底相同的 4 位正整數,若是咱們先把 4 個數字按非遞增排序,再按非遞減排序,而後用第 1 個數字減第 2 個數字,將獲得一個新的數字。一直重複這樣作,咱們很快會停在有「數字黑洞」之稱的 6174,這個神奇的數字也叫 Kaprekar 常數。
例如,咱們從6767開始,將獲得
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...
現給定任意 4 位正整數,請編寫程序演示到達黑洞的過程。
輸入格式:
輸入給出一個 (0,10^​4​​ ) 區間內的正整數 N。
輸出格式:
若是 N 的 4 位數字全相等,則在一行內輸出 N - N = 0000;不然將計算的每一步在一行內輸出,直到 6174 做爲差出現,輸出格式見樣例。注意每一個數字按 4 位數格式輸出。
輸入樣例 1:
6767
輸出樣例 1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
輸入樣例 2:
2222
輸出樣例 2:
2222 - 2222 = 0000

本人AC代碼:spa

//  1019 數字黑洞 
//  一個測試點沒有經過 

# include <stdio.h> 

int main(void)
{
	int val; // 記錄輸入的數字
	int i, j;
	int N[4];
	int max=0, min=0; 
	
	scanf("%d",&val);
	//  將數字拆分 
	for (i=0; i<4; i++)	
	{
		N[i] = val%10;
		val /= 10;
	}
	// 升序排序 
	for (i=1; i<4; i++) 
	{
		for (j=0; j<4; j++)
		{
			if (N[i] < N[j])
			{
				val = N[i];
				N[i] = N[j];
				N[j] = val; 
			}
		}
	}
	
	min = N[0]*1000+N[1]*100+N[2]*10+N[3];
	max = N[3]*1000+N[2]*100+N[1]*10+N[0];
	val = max - min;
	
	while (1)
	{
		// 學會控制輸出格式 用0補齊 
		printf("%04d - %04d = %04d\n",max,min, val);
		if (val==0 || val==6174)
			break;
			//  將數字拆分 
		for (i=0; i<4; i++)	
		{
			N[i] = val%10;
			val /= 10;
		}
		// 升序排序 
		for (i=1; i<4; i++) 
		{
			for (j=0; j<4; j++)
			{
				if (N[i] < N[j])
				{
					val = N[i];
					N[i] = N[j];
					N[j] = val; 
				}
			}
		}
		
		min = N[0]*1000+N[1]*100+N[2]*10+N[3];
		max = N[3]*1000+N[2]*100+N[1]*10+N[0];
		val = max - min;
	}
	
	
	return 0;
}

RRRblog

相關文章
相關標籤/搜索