1023 Have Fun with Numbers (20分)
分析
考察大整数的处理方法,对字符串进行乘二操作,并设置进位标记tag
代码
#include<iostream>
#include<string>
using namespace std;
int cnt[10];
string s;
int main() {
cin >> s;
bool tag = false;
for (int i = s.size() - 1; i >= 0; --i) {
++cnt[s[i] - '0'];
int d = 2 * (s[i] - '0') + tag;
tag = false;
if (d >= 10) {
tag = true;
d -= 10;
}
s[i] = d + '0';
--cnt[d];
}
if (tag) {
s.insert(s.begin(), '1');
--cnt[1];
}
tag = true;
for (int i = 0; i < 10; ++i)
if (cnt[i] != 0)tag = false;
printf("%s\n%s", tag ? "Yes" : "No", s.c_str());
return 0;
}