文章

229

粉丝

0

获赞

1051

访问

40.7k

头像
进制转换 题解:
P1178 北京大学上机题
发布于2026年2月4日 23:54
阅读数 414

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

string s;

int mod()
{
	return (s[s.size()-1]-'0')%2;
}

void div()
{
	string res;
	int t=0;
	for(int i=0;i<s.size();i++)
	{
		int x=s[i]-'0'+t;
		if(x<2&&i==0)
		{
		    t=10;
			res.push_back('0');
		}
		else
		{
			res.push_back(x/2+'0');
		    if(x%2==0)
		    t=0;
		    else
		    t=10;
		}
	}
	while(res[0]=='0')
	{
	    res.erase(res.begin());
	    if(res.size()==0)
	    break;
	}
	s=res;
}

void work()
{
	vector<int> nums;
	while(s.size())
	{
		int x=mod();
		nums.push_back(x);
		div();
	}
	reverse(nums.begin(),nums.end());
	for(int i=0;i<nums.size();i++)
	cout<<nums[i];
	puts("");
}

int main()
{
    while(cin>>s)
    work();
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发