文章
4
粉丝
422
获赞
14
访问
45.0k
模拟10进制转化为-2进制的过程。就是一个数n/-2然后取其余数,因为是二进制,所以余数要为正的。所以我们要处理一下数据,把计算出来的余数取其绝对值。
对于负数我们直接除 -2 会得出错误的结果,例如-3/-2=1余数为-1,余数为负数。所以要先用被除数-3 减去余数 1 再除,此时就可被-2整除,即-3➗-2 = 2 余 1才对。
在解题时,我们先求出正的余数,然后用这个数减去余数,之后再除以-2的话就可以算出正确的结果了。
C/C++代码如下:
#include<bits/stdc++.h>
using namespace std;
int main (){
int in, left;
stack<int> out;
while(scanf("%d", &in) != EOF){
if(in == 0) printf("0\n"); //为零的情况
else{
while(in != 0){
left = abs(in % -2); //算出当前数的余数,一定为正数(二进制)
out.push(left); //余数进栈
in = (in - left) / -2; //当前数减去余数后一定能被-2整除
}
if(out.top() == 0) out.pop(); //去除栈顶的零
while(!out.empty()){ //依次出栈
printf("%d", out.top());
out.pop();
}
printf("\n");
}
}
return 0;
}
登录后发布评论
题解写的很好呀,赞一个
这个思路打死我也想不出来,敢问大佬是怎么想出来的?