uvaoj 11121 Base -2 整数转成负数进制
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 整数转成负数进制相关推荐
- 将10进制整数转换成16进制整数输出
题意: 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示. Input 每行一个整数x,0<= x <= 2^31. Output 每行输出对应的八位十六进制整数 ...
- ip 十进制 整型 java_IP地址转换成10进制整数(zt)
一.由域名求IP地址的程序 下面程序由命令行输入域名,输出ip import java.net.*; public class nslookup { //Usage:java nslookup hos ...
- java非负整数怎么设_使用JAVA将非负十进制整数n转换成b进制,递归方法与非递归方法...
使用JAVA将非负十进制整数n转换成b进制,递归方法与非递归方法 使用JAVA将非负十进制整数n转换成b进制,递归方法与非递归方法 一.题目要求 将非负十进制整数n转换成b进制.(其中b=2~16) ...
- 10进制转换成其他进制-短除法
将10进制下的n转换成b进制下的数. 代码如下: char get(int x) {if (x<=9) return x+'0';return x-10+'A'; }string base(in ...
- 将一个BYTE数组转换成16进制字符串和10进制字符串格式
背景: unsigned char port[5]; 以02x的格式打印出来是 00 00 02 00 00 1.如何转成16进制形式的字符串,使得char *strport16 = "00 ...
- 第E题 转换任意进制 (java方法直接解)==输入一个十进制数N,将它转换成R进制数输出
输入一个十进制数N,将它转换成R进制数输出. Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10). Outpu ...
- 16进制数组转成10进制 qt_第五课_进制2
前言 感谢网友的提醒,前面一课弄错了,是第四课,这一课才是第五课.这一课主要讲传统进制的转换方法.但是需要说明的是,进制间是不需要转换的,每一种进制本身都是完美的. 一.通过中间进制进行转换 需要说明 ...
- 将十进制正整数m转换成k进制(2≤k≤9)数的数字输出
//给定程序的功能是将十进制正整数m转换成k进制(2≤k≤9)数的数字输出. //例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000).请填空. #include <s ...
- 试解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 ...
最新文章
- 力扣(LeetCode)刷题,简单题(第9期)
- 粒子群算法参数w的改进
- 写给期待年薪百万的IT同学
- 票务系统思维导图_【思维导图】第六章:气体灭火系统
- C#.Net工作笔记006---关于各种四舍五入_小数点保留第几位等操作_随时更新
- Mac系统如何安装php,MAC系统如何快速安装php
- CCF201509-1 数列分段(100分)
- 第九届蓝桥杯大赛青少年创意编程 SCRATCH 初级组试题解析
- 易语言手游辅助开发教程
- 前端 flex: 1; 到底是什么意思?
- html 链接到 appstore,如何在微信浏览器内打开App Store链接
- Oracle中如何用一个表的数据更新另一个表中的数据_转载
- 阿里云服务器SSL不可用
- 业务流水号(交易号)生成方法
- 数学建模——评价模型
- Extjs 中鼠标划过悬浮效果的显示
- 怎样做好一个服务器管理员?
- char*data和char data[]
- TB6600HG原理图
- Android入门项目(一):BMI体质指数计算器
热门文章
- 计算机英语翻译 unit 6
- 【Python任务导向】计算机之间的通信(网络编程、UDP、TCP)
- BigQuant上使用技术指标炒股的效果怎样?
- [Skr-Shop]通用抽奖工具之系统设计
- fake库学习记录附实例
- linux 命令行x,向日葵X for Linux Terminal 使用教程(命令行版本)
- DNA甲基化重编程为红梨中光诱导的花青素生物合成提供了见解
- edius软件中常用工程的设置 千万别搞错视频场
- 让GAN再次伟大!拽一拽关键点就能让狮子张嘴大象转身,汤晓鸥弟子的DragGAN爆火,网友:R.I.P. Photoshop...
- 影评 之 《印度暴徒》