PAT Basic Level 1019 数字黑洞 解题思路及AC代码

1. 题目描述及在线测试位置

1.1 编写程序演示到达数字黑洞的过程。注意,输入数字的范围是(0,10000),因此存在非四位数的情况(这一点比较坑)
1.2 在线测试位置:PAT 1019 数字黑洞

2. 具体实现

2.1 基本思路

将输入数字的 各个位数 存储到数组中,先后对数组进行非递增排序 和 非递减排序,分别得到 被减数 和 减数,做减法运算,若运算结果为0 或 数字黑洞 6174 则程序结束,否则继续循环

2.2 AC代码

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

#define N 4 
#define DigitalBlackHole 6174

bool Compare(char A, char B)
{
	return A > B;
}

int GetNumber(int a[]);
void Print(int Number);
void Store(int a[], int Number);

int main()
{
	int Number;
	int a[N];
	int High = 0, Low = 0;

	cin >> Number;

	while (true)
	{
		Store(a, Number); //将输入数字Number的各个位数存储到数组a中

		sort(a, a + N, Compare); //非递增排序得到被减数
		High = GetNumber(a);

		sort(a, a + N); //非递减排序得到减数
		Low = GetNumber(a);

		Number = High - Low;	

		Print(High); cout << " - "; Print(Low); cout << " = ";
		Print(Number); cout << endl;
		
		//若运算结果为0 或 数字黑洞 6174 则程序结束,否则继续循环
		if (Number == DigitalBlackHole || !Number)
			break;
	}

	return 0;
}

void Store(int a[], int Number)
{
	for (int i = 0; i < N; i++)
	{
		a[i] = Number % 10;  
		Number = Number / 10;
	}
}

void Print(int Number)
{
	if (Number)
	{
		int Scale = 1000;
		while (Number < Scale)
		{
			cout << "0";
			Scale /= 10;
		}
		cout << Number;

	}
	else
		cout << "0000";
	

}

int GetNumber(int a[])
{
	int Scale = 1, Result = 0;
	for (int i = N-1; i >= 0; i--)
	{
		Result += a[i] * Scale;
		Scale *= 10;
	}
	return Result;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值