<算法>进制转换超详细
16转10
- 用竖式计算:
16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方
第0位: 5 * 16^0 = 5
第1位: F * 16^1 = 240
第2位: A * 16^2= 2560
第3位: 2 * 16^3 = 8192
-代码
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
while(cin>>s){
int length=s.length();
long long sum=0;
for(int x=0;x<length;x++){
if(s[x]>='0'&&s[x]<='9'){
sum=(s[x]-'0')+16*sum;
}else{
sum=(s[x]-'A'+10)+16*sum;
}
}
cout<<sum;
}
return 0;
}
16转2
- 由于在二进制的表示方法中,每四位所表示的数的最大值对应16进制的15,即16进制每一位上最大值,所以,我们可以得出简便的转换方法,将16进制上每一位分别对应二进制上四位进行转换
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
while(cin>>s){
int length=s.length();
long long sum=0;
int answer[40];
int cot=0;
for(int x=0;x<length;x++){
int y=2;
if(s[x]>='0'&&s[x]<='9'){
y=(s[x]-'0');
}else{
y=(s[x]-'A'+10);
}
do{
answer[cot++]=y%2;
y/=2;
}while(y!=0);
}
for(int i=0;i<cot;i++){
cout<<answer[cot-1-i];
}
}
return 0;
}
2转16进制
- 16进制就有16个数,015,用二进制表示15的方法就是1111,从而可以推断出,16进制用2进制可以表现成00001111,顾名思义,也就是每四个为一位
0 0 1 1| 1 1 0 1
左半边=2+1=3 右半边=8+4+1=13=D
- 代码
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s;
while(cin>>s){
int length=s.length();
string s2;
int pro=1,sum=0,cot=0;
for(int x=length-1;x>=0;x--){
sum+=(s[x]-'0')*pro;
pro=pro*2;
if(x%4==0){
if(sum>=10){
s2+=sum-10+'A';
}else{
s2+=sum+'0';
}
pro=1;
sum=0;
}
}
reverse(s2.begin(),s2.end());
cout<<s2;
}
return 0;
}
10进制转16进制
-代码
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
long long s;
while(cin>>s){
char ans[20]={0};
int cot=0;
do{
if(s%16>=10){
ans[cot++]=s%16-10+'A';
}else{
ans[cot++]=s%16+'0';
}
s/=16;
}while(s);
for(int i=0;i<cot;i++){
cout<<ans[cot-1-i];
}
}
return 0;
}
十六进制转八进制
- 一开始想的是把16进制先转化为10进制,因为从10进制转化为8进制很容易。但是题目中输入的16进制位数规模大,不超过100000位,肯定不能化为10进制数。解法是先把16进制化为四个2进制数,然后三个二进制数一组再化为8进制。 注意 39(16进制)--〉0011 1001 (2进制) --〉111 001(8进制),是从二进制的低位开始三个一组来计算。
- 代码
<算法>进制转换超详细的更多相关文章
- C/C++<算法>进制转换超详细
16转10 用竖式计算: 16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方 第0位: 5 * 16^0 = 5 第1位: F * 16^1 = 240 第 ...
- 结合stack数据结构,实现不同进制转换的算法
#!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Da ...
- lua之m进制转换为n进制-任意进制转换算法
够无聊的写这个,为防止需要的人也无聊一遍,写个吧 算法有n种,但是,咱们一种就够用了 --数组倒序排列 local function orderByDesc( input ) local output ...
- Java实现 蓝桥杯VIP 算法训练 ALGO-16进制转换
算法训练 进制转换 时间限制:1.0s 内存限制:256.0MB 问题描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的 ...
- Java实现 蓝桥杯VIP 算法提高 进制转换
算法提高 进制转换 时间限制:1.0s 内存限制:256.0MB 问题描述 程序提示用户输入三个字符,每个字符取值范围是0-9,A-F.然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制 ...
- ACM2031_进制转换(使用了递归,代码超少的啦!!)
进制转换 Problem Description 输入一个十进制数N,将它转换成R进制数输出. Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R& ...
- Java实现 蓝桥杯VIP 算法训练 ALGO-85进制转换
问题描述 编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十进制整数,并把它打印出来. 输入格式:输入为一个字符串,每个字符都是'0'或'1',字符串的长度不超过32. 输出格 ...
- 学习python第五天进制转换
6.进制之间的转换(重要) 二进制:满二进一 范围:0.1符号:0b例如:0b10...[注意]计算机只能识别二进制数据 八进制:满八进一 范围:0~7符号:0o例如:0o66 十进制:满十进一 范围 ...
- 一起talk C栗子吧(第七回:C语言实例--进制转换)
各位看官们.大家好,从今天開始.我们讲大型章回体科技小说 :C栗子,也就是C语言实例. 闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们.上一回中咱们说的是生成随机数的样例.这一回咱们说的 ...
随机推荐
- POJ1222EXTENDED LIGHTS OUT(高斯消元)
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11815 Accepted: 7 ...
- Maple trees(最小覆盖圆)
Maple trees Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- IdentityServer4 退出登录后,跳转到原来页面
IdentityServer4 退出登录后,默认会跳转到Config.Client配置的PostLogoutRedirectUris地址,那我们如何动态的跳转到原来的地址呢?实现很简单,Logout修 ...
- <template> 标签
<template> 元素,用于描述一个标准的以 DOM 为基础的方案来实现客户端模板.该模板允许你定义一段可以被转为 HTML 的标记,在页面加载时不生效,但可以在后续进行动态实例化.( ...
- linux分析日志的一些常用方法
head -n 2016_05_23_access_log |grep "/859" 显示前10000行中包含 /859 的记录 增加 |wc -l 则改为输出记录数 cat 2 ...
- Mybatis整理_01
Mybatis专题 Mybaits介绍 Mybatis是一个持久化框架,它有不同语言的版本,比如.NET和Java都有Mybatis对应的类库:它有大多数ORM框架都具有的功能,比如自定义的SQL语句 ...
- 【LuaJIT版】从零开始在 macOS 上配置 Lua 开发环境
前言 这篇文章针对的是基于 LuaJIT 的环境配置.借助于 LuaJIT,Lua 的执行效率可以进一步提升几十倍.如果你不是很清楚自己是需要 Lua 还是 LuaJIT,那么建议你从 LuaJIT ...
- JS中!=、==、!==、===的用法和区别
1.对于string,number等基础类型,==和===是有区别的 1)不同类型间比较,==之比较"转化成同一类型后的值"看"值"是否相等,===如果类型不同 ...
- 通过两个小栗子来说说Java的sleep、wait、notify、notifyAll的用法
线程是计算程序运行的最小载体,由于单个单核CPU的硬件水平发展到了一定的瓶颈期,因此就出现了多核多CPU的情况,直接就导致程序员多线程编程的复杂.由此可见线程对于高性能开发的重要性. 那么线程在计算机 ...
- 浅谈Android中的组播(多播)
组播使用UDP对一定范围内的地址发送相同的一组Packet,即一次可以向多个接受者发出信息,其与单播的主要区别是地址的形式.IP协议分配了一定范围的地址空间给多播(多播只能使用这个范围内的IP),IP ...