(PAT甲)1069 The Black Hole of Numbers

这道题不难,把数字放到数组里然后进行两次排序,得到非递增和非递减的两组数字,不断重复过程最后会得到6174这个数字,特别注意的是输出样例中有四个空格,题目中没有说明,但是可以从输出样例中看出来,当时我就是调试这个花了不少时间,然后注意168这类数字需要用0补齐(在高位补),为0168,因为有补0的关系,这里用c语言会比较方便,我是用c++写的,所以会看着相对冗余

#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;

bool cmp(int a, int b)//递减排序cmp
{
	return a > b;
}

void turnarray(int n, int num[])//这里将n的每一位存到num数组中
{
	for (int i = 0; i < 4; i++)
	{
		num[i] = n % 10;
		n /= 10;
	}
}

int turnnumber(int num[])//将num数组转换为数字
{
	int sum = 0;
	for (int i = 0; i < 4; i++)
	{
		sum = sum * 10 + num[i];
	}
	return sum;
}

int main()
{//min和max分别表示递增和递减排序后得到的最小值和最大值
	int n, max,min;
	cin >> n;
	int num[5];
	while (1)
	{
		turnarray(n, num);//将n转换为数组
		sort(num, num + 4);//对num数组元素中元素从小到大排序
		min = turnnumber(num);//获取最小值
		sort(num, num + 4, cmp);//对num数组中元素从大到小排序
		max = turnnumber(num);//获取最大值
		n = max - min;//得到下一个数
		cout <<setw(4)<<setfill('0')<< max <<" "<< "-" <<" "<< setw(4)<<setfill('0')<<min<<" "<< "=" << " "<<setw(4)<<setfill('0')<<n << endl;
		if (n == 0 || n == 6174) break;
	}
	return 0;
}
//特别注意setw和setfill用法

测试结果:

 

发布了53 篇原创文章 · 获赞 13 · 访问量 5791
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章