文章
1
粉丝
34
获赞
3
访问
599
在这道题中,我们需要对负数求解,和之前将十进制数转为二进制不同的是,余数可能会出现负数的情况,所以我们只需要对负余数进行处理即可。
我们首先要知道c++中对负数取余的计算方式:
|小| % |大| = |小| 符号同前
|大| % |小| = |余| 符号同前在对-2进行取余的过程中只会存在一种-1为余数的情况,其他为0或1我们不用进行处理。
如下面的例子:-3 / -2 = 1 ......-1
我们从结果中借一位,即将1变成2,将余数加2变成1,完美解决问题。
#include <iostream>
using namespace std;
const int N = 50;
int main()
{
int n;
while(cin >> n) {
if (n == 0) cout << 0 << endl;
else {
// 10 -> -2
char s[N];
int cnt = 0;
while(n) {
int t = n % (-2);
if (t == -1) {
s[cnt ++] = (t + 2) + '0';
n = n / (-2) + 1;
} else {
s[cnt ++] = t + '0';
n = n / (-2);
}
}
for (int i = cnt - 1; i >= 0; i --) cout << s[i];
cout << endl;
}
}
return 0;
}
...
登录后发布评论
暂无评论,来抢沙发