PAT 乙级 1019 数字黑洞

PAT 乙级 1019 数字黑洞

思路:使用字符串保存数字,然后对字符串进行非递增排序和非递减排序,将字符串转化为数字,两数字相减得到新字符串,继续循环直到新字符串为6174或0000

注意:即使第一个数字就是6174也要循环,因为要求6174 作为差出现,因此必须要做一次循环,再进判断

// 1019 数字黑洞.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

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


bool cmp(char a, char b) {
	return a > b;
}
int main()
{
	//cout << __cplusplus << endl;
	string s;
    cin >> s;
	s.insert(0, 4 - s.length(), '0'); //在0位置插入4-s.length()个字符'0'
	do
	{
		string a = s, b = s;
		sort(a.begin(), a.end(), cmp);
		sort(b.begin(), b.end());
		int temp = stoi(a) - stoi(b);
		s = to_string(temp);
		s.insert(0, 4 - s.length(), '0');
		cout << a << " - " << b << " = " << s << endl;
	} while (s != "6174" && s != "0000");
}	


插入字符串,参考C++ string类insert用法总结 - 正在加载…… - 博客园 (cnblogs.com)

s.insert(0, 4 - s.length(), '0'); //在0位置插入4-s.length()个字符'0'

to_string:将数字转换成字符串(int、long、double)

字符串到数字的转换可以通过 stoX() 系列函数来执行。该系列函数的成员可以将字符串转换为 int、long、float 和 double 类型的数字。具体语法如下所示:

int stoi(const strings str, size_t* pos = 0, int base = 10)
long stol(const strings str, size_t* pos = 0, int base = 10)
float stof(const strings str, size_t* pos = 0)
double stod(const strings str, size_t* pos = 0)

例如,如果试图转换字符串 “-34iseven”,则将成功返回整数 -34,而无法转换的第一个字符的位置 pos 则被设置为 3。base 形参仅适用于整数转换,指示用于转换的进制。pos 和 base 形参都是可选的,所以它们可以被忽略。如果 pos 被忽略,则不会存储停止字符的索引。如果 base 被忽略,则默认为十进制。如果字符串 str 包含一个无效值,例如 “is-34 even?”,则不会进行转换,函数将抛出一个 invalid_argument 异常。

它们的头文件都是 #include< string >

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值