UVa 11121 Base -2(负数进制)
生活随笔
收集整理的這篇文章主要介紹了
UVa 11121 Base -2(负数进制)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
給定一個大于等于0的整數n,求n的-2進制數。
思路:
1. 對于2進制的,大家都是熟悉的: a[i] = n % 2; n = n/2;
2. 是否發現上面少了一個地方呢?n = n/2是否應該寫成 n = (n-a[i])/2 ?這其實是利用了C語言取整的一個特性.
3. 如果對于-2進制,不要偷懶就是了: a[i] = n % 2; n = (n-a[i])/2. 等等還少了什么a[i]必須為正,
? ?所以a[i] = n % 2要改成 a[i] = (n % 2 + 2) % 2;
#include <cstdio> #include <cstring> #include <cstring>int a[50];void solve(int n) {memset(a, 0, sizeof(a));int i;for (i = 0; i < 40; ++i){a[i] = (n % 2 + 2) % 2;n = (n - a[i]) / (-2);}for (i = 40; i > 0; --i)if (a[i]) break;while (i >= 0)printf("%d", a[i--]);printf("\n"); }int main() {int cases, count = 0;scanf("%d", &cases);while (cases--){int n;scanf("%d", &n);printf("Case #%d: ", ++count);solve(n);}return 0; }?
轉載于:https://www.cnblogs.com/kedebug/archive/2012/12/04/2801446.html
總結
以上是生活随笔為你收集整理的UVa 11121 Base -2(负数进制)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: scrum 12.2
- 下一篇: Windows 8 开发31日-第04日