文章

1

粉丝

34

获赞

3

访问

599

头像
负二进制 题解:
P1097
发布于2024年6月7日 21:38
阅读数 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;
}
...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发