UVa 11121 - Base -2

传送门

UVa 11121 - Base -2

题意

给出一个十进制数,转换为-2进制。

思路

因为可能出现余数为-1,所以求余数的时候要这样。
\(ans[k++] = (num % 2 + 2) % 2\)
\(num = (num - ans[k - 1]) / base\)

然后去掉前导0。

代码

#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int base = -2;
 
int main()
{
    //freopen("input.txt", "r", stdin);
    int T, i, j, n, cases = 0;
    scanf("%d", &T);
    while (T--)
    {
        int ans[100], k = 0;
        memset(ans, 0, sizeof ans);
        scanf("%d", &n);
        while (n)
        {
            ans[k++] = (n % 2 + 2) % 2;
            n = (n - ans[k - 1]) / base;
        }
        for (i = k; i > 0; i--)
            if (ans[i])
                break;
        printf("Case #%d: ", ++cases);
        while (i >= 0)
            printf("%d", ans[i--]);
        printf("\n");
    }
    return 0;
}

Powered by Jekyll and Theme by solid