九度 1138

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<stack>
using namespace std;


//判断是不是等于零
bool judge(string s)
{
	int num=0;
	
	for(int i=0;i<s.length();i++)
		if(s[i]=='0')
		num++;
	if(num==s.length())
		return false;
	else
		return true;
}


//返回两位数除以2以后的结果
char change(int tt,char ch)
{
	int num=tt*10+(ch-'0');
	return char('0'+num/2);
}


int main()
{
	string s;
	while(getline(cin,s))
	{
		//如果是0或者1,直接输出
		if(s=="0"||s=="1")
			cout<<s<<endl;
		//不然 进行以下运算
		else
		{
			stack<char> ss;
			//循环遍历,直到所有的数字都为零
			while(judge(s)==true)
			{
				int index=-1;
				//找到第一个数字不为零的位
				for(int i=0;i<s.length()&&index==-1;i++)
					if(s[i]!='0')
						index=i;
				
				//如果位数最大的数字为零
				int tt=0;				
				if(s[index]=='1')
				{
					tt=1;
					s[index]='0';
					index++;
				}


				//一次往下除2
				while(index!=s.length())
				{
					int temp=s[index]-'0';
					s[index]=change(tt,s[index]);
					
					if(temp%2==1)
						tt=1;
					else
						tt=0;
					index++;
				}


				if(tt==0)
					ss.push('0');
				else
					ss.push('1');
			}


			//把二进制里面的数字都输出
			while(ss.empty()==false)
			{
				cout<<ss.top();
				ss.pop();
			}


			cout<<endl;
		}
	}
	return 0;
}

你可能感兴趣的:(算法)