#include <iostream>
#include <string>
#include <stack>
using namespace std;
long NextTreeIdentify(string t)
{
string s,t2,t001("001");
s = t;
long res;
int node,i,posof0,posof001;
bool end = true;
for(i=0;i<=s.size()-3;i++)
{
t2 = s.substr(i,3);
if(t2.compare(t001)==0)
{
posof001 = i;
break;
}
}
end = true;
for(i=posof001+3;i<s.size();i++)
{
if(s[i] != '1')
{
end = false;
break;
}
}
if(!end)
{
/*
s.erase(posof001+1,2);
posof0 = s.find_first_of("0",posof001+1);
s.insert(posof0+1,"1");
s.insert(posof0+1,"0");*/
s.replace(posof001,3,"0");
posof0 = s.find_first_of("0",posof001+1);
s.replace(posof0,1,"001");
}
else
{
s[0] = '0';
for(i=1;i<s.size();i++)
{
if(i%2 == 0)
s[i] = '1';
else
s[i] = '0';
}
}
i = s.size()-1;
res = 0;
while(i>=2)
{
node = s[i]-'0';
if(node == 1)
res += node<<i;
i--;
}
return res;
}
void doRun()
{
long res,n,t;
int node;
stack<int> tree;
string s;
scanf("%ld",&n);
if(n == 0||n == 4)
{
res = n;
}
else
{
t = n;
while(1)
{
node = t % 2;
tree.push(node);
if (t<=1)break;
t>>=1;
}
if(tree.size()>30)
return;
while(!tree.empty())
{
s.insert(0,(char*)(tree.top()+'0'));
tree.pop();
}
res = NextTreeIdentify(s);
}
printf("%ld\n",res);
}
int main()
{
//while(1)
doRun();
return 0;
}
正文
pku(1767)2005-09-08 04:49:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/ddtme/4506.html
阅读(4304) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论