文章

10

粉丝

0

获赞

18

访问

527

头像
进制转换 题解:除2取余法
P1178 北京大学上机题
发布于2026年2月26日 13:30
阅读数 33

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

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

void div() {
    string res;
    int carry=0;

	for(int i=0;i<s.size();i++)
	{
		int num=s[i]-'0'+carry*10;
		res.push_back(num/2+'0');
		carry=num%2;
	}
	
	// 移除结果中的前导零(保留至少一位数字)
    while (res.size() > 1 && res[0] == '0') {
        res.erase(res.begin());
    }
	s=res;
}

void work()
{
	if(s=="0")
	{
		cout<<"0"<<endl;
	}

	vector<int> nums;

	while(s!="0")
	{
		nums.push_back(mod());
		div();
	}
	reverse(nums.begin(),nums.end());

	for (int i = 0; i < nums.size(); i++)
        cout << nums[i];
    cout << endl;
}

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

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发