题目描述
请注意,数字 123456789 是一个 9 位数字,完全由 1 到 9 组成,没有重复。
将其加倍,我们将获得 246913578,它恰好是另一个 9 位数字,恰好由 1 到 9 组成,只是排列不同。
现在,给定你一个 k 位的数字,请你判断将其加倍以后得到的数字是否可以由原数字的各数位重新排列得到。
输出格式
输出共两行
如果原数字的各数位重新排列可以得到加倍后的数字,则在第一行输出 Yes,否则输出 No。
第二行,输出加倍后得到的数字。
样例
输入样例:
1234567899
输出样例:
Yes
2469135798
算法1
简单的高精度乘法,套高进度乘法的板子即可。
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
vector<int> mul(vector<int> &a, int b)
{
int t = 0;
vector<int> ans;
for (int i = 0; i < a.size() || t; i ++)
{
if (i < a.size()) t += a[i] * b;
ans.push_back(t % 10);
t /= 10;
}
return ans;
}
int main()
{
string str;
cin >> str;
vector<int> a, b, c, d;
for (int i = str.size() - 1; i >= 0; i --) a.push_back(str[i] - '0');
c = a; sort(c.begin(), c.end());
b = mul(a, 2); d = b;
sort(b.begin(), b.end());
c == b ? puts("Yes") : puts("No");
for (int i = d.size() - 1; i >= 0; i --) cout << d[i];
}