水题,也只是简单的模拟
需要注意的一点是:
546对于这种double后会进位的数要留意,如果你输出的是092,那么就是少了进位的1。我也因为这个错了一次。
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int number[22];
int times[10];
int length;
void solve()
{
int up=0;
for (int i = length-1; i >=0; i--)
{
number[i] =(number[i])* 2+up;
up = number[i] / 10;
number[i] %= 10;
times[number[i]]--;
}
bool flag = true;
for (int i = 0; i < 10; i++)
{
if (times[i] != 0 || times[i] < 0)
{
flag = false;
break;
}
}
if (flag)
{
cout << "Yes" << endl;
}
else
cout << "No" << endl;
flag = true;
if (up)
cout << up;
for (int i = 0; i < length; i++)
{
cout << number[i];
}
}
void input()
{
string a;
cin >> a;
length = a.length();
for (int i = 0; i < length; i++)
{
number[i] = a[i] - '0';
times[number[i]]++;
}
solve();
}
int main()
{
input();
return 0;
}