思路:
将输入的数转成2进制,如果某一位是一,则存储到ri数组中,是2,则存储到zo数组中,并向前一位进位
#include <bits/stdc++.h>
using namespace std;
int m,zuo,zo[10000001],you,ri[10000001],s[10000001],slen,jin;
int mi(int a,int b)
{
int t = 1;
for(int i = 0; i < b; i++) t *= a;
return t;
}
int main()
{
cin>>m;
while(m)
{
int p = m % 3;
if(jin == 1)
{
p++;
jin = 0;
}
if(p == 2)
{
zo[zuo++] = mi(3,slen);
jin = 1;
}
else if(p == 1) ri[you++] = mi(3,slen);
else if(p == 3) jin = 1;
slen++;
m /= 3;
}
if(jin == 1) ri[you++] = mi(3,slen);
cout<<zuo<<" ";
for(int i = 0; i < zuo; i++) cout<<zo[i]<<" ";
cout<<endl<<you<<" ";
for(int i = 0; i < you; i++) cout<<ri[i]<<" ";
return 0;
}