当前位置: 首页 > news >正文

实现任意进制(2—32)转换

2020/01/01

  • 实现原理
  • 参考代码
  • 测试样例
  • 其他补充
  • 后记交流




实现原理

本程序借助10进制数为中介数据,实现任意进制数之间的相互转换(2-36进制范围)
需要注意的是,数值范围不可超出 long long int 所表示的范围,即所输入需要为正数,且要小于 (2^63) - 1 .(64位处理器计算机)
若需要负值数据,只需要处理第一位的符号位即可.
还有一点,本程序的字母表示全部采用了大写方式,如需要小写字母形式可自行修改.
其实也简单,大小写ASCLL码数值相差32,直接加减即可转换.eg: 'a' - 32 = 'A'.


参考代码

// 进制转换.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include "pch.h"
#include <iostream>
#include <string>
#include <cmath>
using namespace std;class BaseConversion {
private:const string character = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//从from进制数source转为to进制数result;int from;int to;string source;string result;
public:void init(int from = 10, int to = 2, string source = "1024") {this->from = from;this->to = to;this->source = source;}void computing();int pickIndexNumber(char ch) {if (character.find(ch)!=string::npos) {return character.find(ch);}else {cout << "待转换的数据来源不合法,请检查校正后重新输入!/n(提示:不可使用负数符号开头)" << endl;}}string getResult() {return result;}
};
void BaseConversion::computing() {int ten = 10;long long num = 0;//转为10进制后的数值结果if (from > 1 && from < 37) {for (int i = 0; i < source.length(); ++i) {num += pickIndexNumber(source[i])*pow(from, source.length() - i - 1);}cout << "十进制数表示结果为:" << num << endl;}else {cout << "输入进制有误,请确保进制数范围处于[2,36]范围!" << endl;}if (num < to) {result += character[num];}else {while (num >= to) {result = character[num%to] + result;//如此连接处理则不需要对结果做逆序处理;num /= to;}result = character[num] + result;//num<to的时候,作为个位所在数值;}
}int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);int f, t;string s;std::cout << "请输入从from进制转换到to进制的数值source,依次输入from、to、source:\n(提示:字母请使用大写形式,且不可使用负数符号开头)" << endl;while(true) {cin >> f >> t >> s;BaseConversion bc;bc.init(f, t, s);bc.computing();cout << s << "(" << f << ") ----> " << bc.getResult() << "(" << t << ")" << endl;}return 0;
}

测试样例


鼠标置于此处可直接预览结果


测试样例2



其他补充

进制转换问题要灵活运用,很多时候并不需要借助10进制作为中介.
抛砖引玉:
16进制转2进制,直接使用四位串流实现快速转换,即任意一个16进制的位上的数值可转位对应4位二进制数值,采用“8421”快速转换.
同理,32进制则使用五位二进制串流即可,“16,8,4,2,1”.
反过来:
二进制数转十六进制数,可直接采用4位二进制化1位十六进制实现快速转换.
本程序为了便于理解原理和编码实现,“符合人性思维”,权衡之下才用了十进制数作为中介对象.
其实是可以尝试直接转换的,只是很难直接理解、思维可能会不到位.具体内容下次更新时补充.
最后之所以写这么一个进制转换问题,是因为自己即将总结密码编码学知识了.
先为异或运算(相异为真,C++即1)打个前站,预热一下.


后记交流

以上代码和文字纯属手工码字,如有错误欢迎指出、以便我改正/改进代码.
如需交流,请联系QQ/QQ邮箱:2636105163
也可申请加入兴趣群聊,956349248,各种福利小彩蛋详见群资料介绍界面.
2020/01/01 22:44
Franklin

相关文章:

实现任意进制(2—32)转换

2020/01/01 实现原理参考代码测试样例其他补充后记交流 实现原理 本程序借助10进制数为中介数据&#xff0c;实现任意进制数之间的相互转换&#xff08;2-36进制范围&#xff09; 需要注意的是&#xff0c;数值范围不可超出 long long int 所表示的范围&#xff0c;即所输入需…...

Spring Boot 集成 Redis 三种模式实践汇总

背景 项目的某个模块集成了 SpringBoot Redis 包&#xff0c;客户端使用 Lettuce&#xff0c;Redis 测试环境单机模式。但是现场反馈的 Redis 环境是集群&#xff0c;如果简单的修改 spring.redis 配置为集群的配置信息&#xff0c;程序能否能无缝衔接呢&#xff1f; 本文记录…...

MySQL DQL语法

MySQL DQL语法 DQL语法简介 DQL&#xff08;Data Query Language&#xff09;语句是一种用于从数据库中检索数据的语言。它主要用于数据查询和数据分析&#xff0c;而不是对数据库中的数据进行更新、插入或删除。DQL语句通常用于获取特定条件下的数据&#xff0c;进行聚合计算…...

算法之线性表1.1.1(7)带头结点链表的反向输出

设L为带头结点的单链表&#xff0c;编写算法实现从尾到头反向输出每个节点的值。 算法思想&#xff1a; 方法一&#xff1a;将链表压栈再输出&#xff0c;时间复杂度为O(n),空间复杂度为O(n) 方法二&#xff1a;用头插法重新建立单链表在输出&#xff0c;时间复杂度为O(n),空…...

设计模式三:抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种方式来创建一系列相关或相互依赖的对象&#xff0c;而无需指定具体实现类。 在软件开发中&#xff0c;有时候需要根据不同的条件或环境来创建一组相关的对象。抽象工…...

Linux用户权限问题详解

Linux用户权限问题详解 【一】Linux权限的概念&#xff08;1&#xff09;用户类型&#xff08;2&#xff09;如何切换用户&#xff08;3&#xff09;用户相关的一些命令 【二】Linux文件权限管理&#xff08;1&#xff09;文件访问者的分类&#xff08;2&#xff09;文件类型和…...

flask中的session介绍

flask中的session介绍 在Flask中&#xff0c;session是一个用于存储特定用户会话数据的字典对象。它在不同请求之间保存数据。它通过在客户端设置一个签名的cookie&#xff0c;将所有的会话数据存储在客户端。以下是如何在Flask应用中使用session的基本步骤&#xff1a; 首先…...

记录联想拯救者R720重装系统

文章目录 bios里找不到U盘启动项2023.7.23重装系统后数据记录C盘内存修改默认AppData的路径&#xff08;亲测&#xff0c;没用&#xff09; bios里找不到U盘启动项 制作好启动盘后&#xff0c;开机按F2进入bios后&#xff0c;找不到U盘启动项&#xff0c;如下图所示&#xff1…...

Spring Alibaba Sentinel实现集群限流demo

1.背景 1.什么是单机限流&#xff1f; 小伙伴们或许遇到过下图这样的限流配置 又或者是这样的Nacos动态配置限流规则&#xff1a; 以上这些是什么限流&#xff1f;没错&#xff0c;就是单机限流&#xff0c;那么单机限流有什么弊端呢&#xff1f; 假设我们集群部署3台机器&a…...

102、SOA、分布式、微服务之间有什么关系和区别?

SOA、分布式、微服务之间有什么关系和区别? 分布式架构是指将单体架构中的各个部分拆分&#xff0c;然后部署到不同的机器或进程中去&#xff0c;SOA和微服务基本上都是分布式架构师SOA是一种面向服务的架构&#xff0c;系统的所有服务都注册在总线上&#xff0c;当调用服务时…...

Ubuntu 20.04下的录屏与视频剪辑软件

ubuntu20.04下的录屏与视频剪辑 一、录屏软件SimpleScreenRecorder安装与使用 1、安装 2、设置录制窗口参数 3、开始录制 二、视频剪辑软件kdenlive的安装 1、安装 2、启动 一、录屏软件SimpleScreenRecorder安装与使用 1、安装 &#xff08;1&#xff09;直接在终端输入以下命…...

面试题 -- iOS数据存储

文章目录 一、如果后期需要增加数据库中的字段怎么实现&#xff0c;如果不使用CoreData呢&#xff1f;二、SQLite 数据存储是怎么用&#xff1f;三、简单描述下客户端的缓存机制&#xff1f;四、实现过多线程的Core Data 么&#xff1f;NSPersistentStoreCoordinator&#xff0…...

spring复习:(51)environment、systemProperties、systemEnvironment三个bean是在哪里被添加到容器的?

一、主类&#xff1a; package cn.edu.tju.study.service.anno;import cn.edu.tju.study.service.anno.config.MyConfig; import cn.edu.tju.study.service.anno.domain.Person; import com.sun.javafx.runtime.SystemProperties; import org.springframework.context.annotat…...

element ui 上传控件携带参数到后端

1.携带固定参数&#xff1a; 2.携带不固定参数&#xff1a; <el-row> <el-col :span"24"> <el-upload :multiple"false" :show-file-list"false" :on-success"f_h…...

scrapy分布式+指纹去重原理

1&#xff0c;指纹去重原理存在于 scrapy.util.requests 里面 需要安装的包 pip install scrapy-redis-cluster # 安装模块 pip install scrapy-redis-cluster0.4 # 安装模块时指定版本 pip install --upgrade scrapy-redis-cluster # 升级模块版本 2&#xff0c;setting配置 …...

FileHub使用教程:Github Token获取步骤,使用快人一步

FileHub介绍 filehub是我开发的一个免费文件存储软件&#xff0c;可存万物。软件仓库&#xff1a;GitHub - Sjj1024/s-hub: 一个使用github作为资源存储的软件 软件下载地址&#xff1a;。有问题可以留言或者提Issue&#xff0c; 使用第一步&#xff1a;获取Github Token 使…...

嵌入式开发:单片机嵌入式Linux学习路径

SOC&#xff08;System on a Chip&#xff09;的本质区别在于架构和功能。低端SOC如基于Cortex-M架构的芯片&#xff0c;如STM32和NXP LPC1xxx系列&#xff0c;不具备MMU&#xff08;Memory Management Unit&#xff09;&#xff0c;适用于轻量级实时操作系统如uCOS和FreeRTOS。…...

Libvirt的virsh工具常用命令

在使用Libvirt的virsh工具时&#xff0c;以下是常见的一些命令&#xff1a; 连接到Hypervisor&#xff1a; virsh -c <URI>&#xff1a;连接到指定的Hypervisor&#xff0c;例如 virsh -c qemu:///system 连接到本地的QEMU/KVM Hypervisor。 虚拟机管理&#xff1a; list…...

高斯消元解异或方程组写法

高斯约旦消元解异或方程组 for(int j1;j<n;j){for(int ij1;i<n;i)if(a[i][j]){swap(a[i],a[j]);break;}if(!a[i][i]){if(a[i][n1])//no...else ...//mul}for(int i1;i<n;i)if(i!j&&a[i][j])for(int kj;k<n1;k)a[i][k]^a[j][k];}正常高斯消元法 int r1;for…...

前端 mock 数据的几种方式

目录 接口demo Better-mock just mock koa webpack Charles 总结 具体需求开发前&#xff0c;后端往往只提供接口文档&#xff0c;对于前端&#xff0c;最简单的方式就是把想要的数据写死在代码里进行开发&#xff0c;但这样的坏处就是和后端联调前还需要再把写死的数据…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...