「NOIP2000」「Codevs1042」 进制转换
题目描述 Description
我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式。例如:123可表示为 1*102+2*101+3*100这样的形式。
与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置的(值-1)为指数,以2为底数的幂之和的形式。一般说来,任何一个正整数R或一个负整数-R都可以被选来作为一个数制系统的基数。如果是以R或-R为基数,则需要用到的数码为 0,1,....R-1。例如,当R=7时,所需用到的数码是0,1,2,3,4,5和6,这与其是R或-R无关。如果作为基数的数绝对值超过10,则为了表示这些数码,通常使用英文字母来表示那些大于9的数码。例如对16进制数来说,用A表示10,用B表示11,用C表示12,用D表示13,用E表示14,用F表示15。
在负进制数中是用-R 作为基数,例如-15(十进制)相当于110001(-2进制),并且它可以被表示为2的幂级数的和数:
110001=1*(-2)5+1*(-2)4+0*(-2)3+0*(-2)2+
0*(-2)1 +1*(-2)0
设计一个程序,读入一个十进制数和一个负进制数的基数, 并将此十进制数转换为此负进制下的数: -R∈{-2,-3,-4,...,-20}
输入描述 Input Description
输入的每行有两个输入数据。
第一个是十进制数N(-32768<=N<=32767); 第二个是负进制数的基数-R。
输出描述 Output Description
结果显示在屏幕上,相对于输入,应输出此负进制数及其基数,若此基数超过10,则参照16进制的方式处理。
样例输入 Sample Input
30000 -2
-20000 -2
28800 -16
-25000 -16
样例输出 Sample Output
30000=11011010101110000(base-2)
-20000=1111011000100000(base-2)
28000=19180(base-16)
-25000=7FB8(base-16)
数据范围及提示 Data Size & Hint
上面已述。
题解
啊真是好久没发博客了(懒腰
其实这道题就是把一个十进制数转成某个负进制。我们肯定学过正进制数转换,所以考虑如何把正进制转换的方法迁移过来。
其实是一样的鸭,也是短除法
eg:-15(10)=110001(-2)
(图是毛来的)
把n%r的余数作为这一位的值,然后把n/=r,直到n==0
而与正进制的一丢丢区别就是,蠢萌的计算机算负数取余的值可能会给出负数(eg:(-15)%(-2)=(-1)),所以强行把原商+1,把余数转成正数就好啦(撒花
#include<cstdio>
#include<iostream>
using namespace std;
char a[]={'','','','','','','','','','','A','B','C','D','E','F','G','H','I'};
int ans[];
int toa=;
int main()
{
int n,r;
scanf("%d%d",&n,&r);
printf("%d=",n);
while(n)
{
if(n<&&n%r!=)
{
ans[++toa]=n-((n/r)+)*r;
//cout<<n<<" "<<n/r+1<<" "<<r<<endl;
n=n/r+;
}
else
{
ans[++toa]=n%r;
//cout<<n<<" "<<r<<endl;
n/=r;
}
}
while(toa)
{
cout<<a[ans[toa]];
toa--;
}
printf("(base%d)",r);
return ;
}
「NOIP2000」「Codevs1042」 进制转换的更多相关文章
- NOIP2000 进制转换
题一 进制转换 (18分) 问题描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之 ...
- 进制转换(NOIP2000&NOIP水题测试(2017082301))
题目链接:进制转换 这题得明白其中的数学方法,明白后就不难了. 那么我们应该怎么计算呢? 其实也很简单. 我们依然采取辗转相除法. 但是,对于负的余数,我们需要进行一些处理. 我们怎么处理呢? 很简单 ...
- Day02_IP地址详解&进制转换&DOS基本命令与批处理
学于千峰教育开源课程 感谢 千峰教育官网 b站在线视频 IP地址详解 一.简单局域网的构成 局域网:一般称为内网 简单局域网的构成:交换机.网线.PC(其他IT终端) 交换机:用来组建内网的局域网的设 ...
- 洛谷P1017 进制转换
洛谷P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 \(1*10 ...
- 洛谷——P1017 进制转换
P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1\times ...
- LG1017 进制转换:负数进制
题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1×102+2×101+3×1001\ ...
- SQL Server 进制转换函数
一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下 ...
- [No000071]C# 进制转换(二进制、十六进制、十进制互转)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- JS中的进制转换以及作用
js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: //10进制转为16进制 ().toString() // =>&q ...
随机推荐
- Js 流程控制
流程控制 顺序.分支.循环 顺序结构 代码一行一行从上往下执行并解析 分支结构 if语句 switch语句 if语句 单分支 if(条件表达式){ //语句块 } 含义:当条件表达式为真的时候就执行里 ...
- Keil建立第一个C51工程的步骤
参见51+arm开发板<使用手册.pdf> 1.“project” >> “new project” >> 新建一个用于保存工程的文件夹例如dem &g ...
- Java并发编程,Condition的await和signal等待通知机制
Condition简介 Object类是Java中所有类的父类, 在线程间实现通信的往往会应用到Object的几个方法: wait(),wait(long timeout),wait(long tim ...
- JS --- 数组循环要用length
socket.on("receive", function (data) { deviceone.print("返回的数据:"+data) // 发送异常 va ...
- Proximal Gradient Descent for L1 Regularization(近端梯度下降求解L1正则化问题)
假设我们要求解以下的最小化问题: $min_xf(x)$ 如果$f(x)$可导,那么一个简单的方法是使用Gradient Descent (GD)方法,也即使用以下的式子进行迭代求解: $x_{k+1 ...
- Go fsm
package fsm import ( "log" ) type EvtIf interface { GetEvtType() string } type Action inte ...
- Effective C++ 条款八 别让异常逃离析构函数
class DBConn //这个class用来管理DBConnction对象 { public: //自己设计一个新的DBConn接口 方法3 void close() { db.close() ...
- Hadoop教程(一)
英文原文:cloudera,编译:ImportNew – Royce Wong Hadoop从这里开始!和我一起学习下使用Hadoop的基本知识,下文将以Hadoop Tutorial为主体带大家走一 ...
- OTT
http://baike.baidu.com/view/1315414.htm OTT 编辑 OTT 是“Over The Top”的缩写,是通信行业非常流行的一个词汇,这个词汇来源于篮球等体育运 ...
- HashMap源代码学习笔记
HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快的查询速度主要是由于它是通过计算散列码来决定存储的位置. HashMap中主要是通过key的hashCode来计算hash值的 ...