水题,直接模拟
但提交的时候还是错了几次,原因在于我递归产生的序列是恰好反着的,我没看清,于是错了几次。
递归出来的数位是反着的,这点需要记住。
代码如下
#include<iostream>
#include<string>
#include<fstream>
#include<cmath>
#include<sstream>
using namespace std;
//ifstream fin("fin.txt");
//streambuf *old = cin.rdbuf(fin.rdbuf());
int number;
int r;
int ans[1000000];
int t = 0;
void deep(int radix, int num)
{
if (num < radix)
{
ans[t++] = num;
return;
}
deep(radix, num / radix);
ans[t++] = num%radix;
}
void solve()
{
int length = t;
bool flag = true;
for (int i = 0; i < length / 2; i++)
{
if (ans[i] != ans[length - 1 - i])
{
flag = false;
break;
}
}
if (flag)
cout << "Yes" << endl;
else
cout << "No" << endl;
for (int i = 0; i < length - 1; i++)
cout << ans[i] << " ";
cout << ans[length - 1] << endl;
}
void input()
{
cin >> number >> r;
t = 0;
if (number == 0 || number == 1)
{
cout << "Yes" << endl;
cout << number << endl;
return;
}
deep(r, number);
solve();
}
int main()
{
input();
return 0;
}