uvaoj 11121 Base -2 整数转成负数进制

给定一个十进制的数,将其转成-2进制的数。也就是n=b0+b1*(-2)+b2*(-2)^2+b3*(-2)^3...。其中bi为0或1。

算法的描述很简单:n mod -2 余数可能为-1,0,1,但是不能出现-1,只能有0,1所以将-1变为1,并且商要加1。然后依此迭代直到商为0为止。

先来看看对一个数n变成m(m>0)进制的情况,每次模m,除m直到n为0为止,把得到的余数逆序就是m进制的数。也就是说第i(i总0开始计数)此迭代得到的是权重为m^i的位置上的数,如果我们把第i次的商加1,那么,它影响的是第i+1此迭代产生的余数,相当于把原来的数加上了m^(i+1)。

在这里,我们将余数-1变成了1,当n为正数的时候,只有当i为奇数的时候才能产生余数-1(因为余数的正负号只和n的正负号有关),那么这个位置就应该是-1*(-2)^i,因为i是奇数,所以也就是2^i,我们把-1变成了1,也就是变成了-2^i,那么就少了2^(i+1),少了,就要加上,惊奇的发现只要在这轮迭代的商上加上1,就相当于加上了2^(i+1),真是完美。当n为负数的情况类似。

代码如下:

/*************************************************************************> File Name: 11121.cpp> Author: gwq> Mail: gwq5210@qq.com > Created Time: 2015年01月06日 星期二 20时22分05秒************************************************************************/#include <cmath>
#include <ctime>
#include <cctype>
#include <climits>
#include <cstdio>
#include <cstdlib>
#include <cstring>#include <map>
#include <set>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <algorithm>#define INF (INT_MAX / 10)
#define clr(arr, val) memset(arr, val, sizeof(arr))
#define pb push_back
#define sz(a) ((int)(a).size())using namespace std;
typedef set<int> si;
typedef vector<int> vi;
typedef map<int, int> mii;
typedef long long ll;const double esp = 1e-5;#define N 1010int ans[N];int main(int argc, char *argv[])
{int t;int c = 0;scanf("%d", &t);while (t--) {int n;int cnt = 0;scanf("%d", &n);clr(ans, 0);while (n != 0) {ans[cnt++] = n % (-2);n /= -2;if (ans[cnt - 1] == -1) {ans[cnt - 1] = 1;++n;}}printf("Case #%d: ", ++c);for (int i = cnt - 1; i > 0; --i) {printf("%d", ans[i]);}printf("%d\n", ans[0]);}return 0;
}

有了前面的讨论,就不难写出来转成任意负数进制的情况了,转成了-m(m>0)进制,那么在i为奇数时就会产生余数-p(0<p<m),对应的位值为-p*(-m)^i=p*m^i,我们可以将p变成m-p,也就变成了-(m-p)*m^i,相当于减小了m^(i+1),那就要补回来,同上边一样,在商的位置加上一就可以了。

代码只需要该一点就行了。

参考:

1)http://www.cnblogs.com/scau20110726/archive/2012/12/21/2828420.html

uvaoj 11121 Base -2 整数转成负数进制相关推荐

  1. 将10进制整数转换成16进制整数输出

    题意: 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示. Input 每行一个整数x,0<= x <= 2^31. Output 每行输出对应的八位十六进制整数 ...

  2. ip 十进制 整型 java_IP地址转换成10进制整数(zt)

    一.由域名求IP地址的程序 下面程序由命令行输入域名,输出ip import java.net.*; public class nslookup { //Usage:java nslookup hos ...

  3. java非负整数怎么设_使用JAVA将非负十进制整数n转换成b进制,递归方法与非递归方法...

    使用JAVA将非负十进制整数n转换成b进制,递归方法与非递归方法 使用JAVA将非负十进制整数n转换成b进制,递归方法与非递归方法 一.题目要求 将非负十进制整数n转换成b进制.(其中b=2~16) ...

  4. 10进制转换成其他进制-短除法

    将10进制下的n转换成b进制下的数. 代码如下: char get(int x) {if (x<=9) return x+'0';return x-10+'A'; }string base(in ...

  5. 将一个BYTE数组转换成16进制字符串和10进制字符串格式

    背景: unsigned char port[5]; 以02x的格式打印出来是 00 00 02 00 00 1.如何转成16进制形式的字符串,使得char *strport16 = "00 ...

  6. 第E题 转换任意进制 (java方法直接解)==输入一个十进制数N,将它转换成R进制数输出

    输入一个十进制数N,将它转换成R进制数输出. Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10). Outpu ...

  7. 16进制数组转成10进制 qt_第五课_进制2

    前言 感谢网友的提醒,前面一课弄错了,是第四课,这一课才是第五课.这一课主要讲传统进制的转换方法.但是需要说明的是,进制间是不需要转换的,每一种进制本身都是完美的. 一.通过中间进制进行转换 需要说明 ...

  8. 将十进制正整数m转换成k进制(2≤k≤9)数的数字输出

    //给定程序的功能是将十进制正整数m转换成k进制(2≤k≤9)数的数字输出. //例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000).请填空. #include <s ...

  9. 试解PTA《20211122-函数基础练习》,涉及 高精度加法 和 10进制转换成2-16进制问题,有需要的同学来看看吧;

    目录 一.前言 二.例题部分 2.1.进制转换 2.1.1.题解1 2.1.2.题解2 2.2. 函数返回一个整数的反序数 (20 分) 2.2.2 题解 2.3. 大整数A+B (10 分) 2.3 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第9期)
  2. 粒子群算法参数w的改进
  3. 写给期待年薪百万的IT同学
  4. 票务系统思维导图_【思维导图】第六章:气体灭火系统
  5. C#.Net工作笔记006---关于各种四舍五入_小数点保留第几位等操作_随时更新
  6. Mac系统如何安装php,MAC系统如何快速安装php
  7. CCF201509-1 数列分段(100分)
  8. 第九届蓝桥杯大赛青少年创意编程 SCRATCH 初级组试题解析
  9. 易语言手游辅助开发教程
  10. 前端 flex: 1; 到底是什么意思?
  11. html 链接到 appstore,如何在微信浏览器内打开App Store链接
  12. Oracle中如何用一个表的数据更新另一个表中的数据_转载
  13. 阿里云服务器SSL不可用
  14. 业务流水号(交易号)生成方法
  15. 数学建模——评价模型
  16. Extjs 中鼠标划过悬浮效果的显示
  17. 怎样做好一个服务器管理员?
  18. char*data和char data[]
  19. TB6600HG原理图
  20. Android入门项目(一):BMI体质指数计算器

热门文章

  1. 计算机英语翻译 unit 6
  2. 【Python任务导向】计算机之间的通信(网络编程、UDP、TCP)
  3. BigQuant上使用技术指标炒股的效果怎样?
  4. [Skr-Shop]通用抽奖工具之系统设计
  5. fake库学习记录附实例
  6. linux 命令行x,向日葵X for Linux Terminal 使用教程(命令行版本)
  7. DNA甲基化重编程为红梨中光诱导的花青素生物合成提供了见解
  8. edius软件中常用工程的设置 千万别搞错视频场
  9. 让GAN再次伟大!拽一拽关键点就能让狮子张嘴大象转身,汤晓鸥弟子的DragGAN爆火,网友:R.I.P. Photoshop...
  10. 影评 之 《印度暴徒》