文章

19

粉丝

0

获赞

1

访问

401

头像
负二进制 题解:C++
P1097
发布于2025年6月25日 16:03
阅读数 16

#include<bits/stdc++.h>
using namespace std;

int main(){
	int n;
	while(cin>>n){
		int m;
		string s;
		if(n==0){
			cout<<"0";
		}else{
			while(n!=0){
				m=n%(-2);
				n=n/(-2);
				if(m<0){
					m=1;
					n++;
				}
				s=s+to_string(m);
			}
			for(int i=s.length()-1;i>=0;i--){
				cout<<s[i];
			}
		}
		cout<<endl;
	}
	return 0;
}

这个题需要注意的地方有两点:
1.特殊值的考虑,需要考虑输入为0的情况;

2.对于负二进制的计算:m为余数,n为被除数;需要注意的是当余数小于0时(只能是-1),所以直接修改为1即可,此时会发现除数每次都少1,所以需要除数++;(因为余数小于0时,即为-1时,需要把它变为1,此时正好需要除数+1)。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发