1023 Have Fun with Numbers(20分)

题目翻译:

给定一个不超过20位的正整数,将其2倍后得到的正整数进行判断,如果组成两者的元素相同(仅仅排列方式不同),则输出“Yes",否则输出”No"。

题解思路:

由于不超过20位,而unsigned long long最多支持19位,因此可以分情况讨论。最后排序一下即可。

代码:

#include
using namespace std;

int main()
{
	string s, s2;
	cin >> s;
	int p = s.size();
	if (p <= 18||(p ==19&&s[0]<'5'))
		s2 = to_string(stoll(s) * 2);
	else
	{
		string t1 = s.substr(0, 10), t2 = s.substr(10);
		unsigned long long t3 = stoll(t1) * 2, t4 = stoll(t2) * 2;
		if (t2[0] >= '5')
			s2 = to_string(t3 + 1) + to_string(t4).substr(1);
		else
			s2 = to_string(t3) + to_string(t4);
	}
	string temp = s2;
	sort(s.begin(), s.end());
	sort(s2.begin(), s2.end());
	if (s == s2)
		cout << "Yes" << endl << temp;
	else
		cout << "No" << endl << temp;
}

坑点:

你可能感兴趣的:(算法,c++,数据结构)