C++:万能进制转换

目录

  • 引言
  • 一、p进制转为十进制
  • 二、十进制转换为p进制
  • 三、测试

引言

本文介绍的这个 p p p 进制与十进制之间的转换,主要是针对算法竞赛中的,对于一些特殊情况,比如说字母大小写、前导零、非法输入的处理等这些问题其实都没有去深究,因为在算法竞赛中给你的数据都是合法的,然后只需要你跟据这个来进行简单的转换即可。而对于要实现一些库函数,怎么确保它的安全性和正确性,暂时先不考虑了。


一、p进制转为十进制

思路:字符串最左边的下标是从 0 0 0 开始的,所以说 0 0 0 号下标是权重最大的了。我们依次从 0 0 0 号下标开始遍历,每一次都将现有的数乘以 p p p ,相当于左移了一位,然后再加上当前的值。动态的想:先将当前数全部向左移一位,然后再加上当前位的数。然后就是对数字和字母的处理了,详情见代码。

int p_to_ten(string s, int p)  // p进制字符串 转换为 十进制数 
{int res = 0;for(int i = 0; i < s.size(); ++i){res *= p;if(s[i] >= 'A' && s[i] <= 'Z') res += s[i] - 'A' + 10;else res += s[i] - '0';}return res;
}

二、十进制转换为p进制

思路:类比于十进制数,第一次取模所得的数是最低位的数,然后对原本的数除以 p p p ,相当于将整个数向右移了一位,然后再取模,相当于取第二个数的模,就这样重复此过程,直到为 0 0 0 。因为第一次添加的数相当于是低位,而我们是依次向后添加数的,所以最后翻转一下,就是最终的结果了。

string ten_to_p(int nums, int p)  // 十进制数 转换为 p进制字符串 
{string res;while(nums){int t = nums % p;if(t < 10) res.push_back(t + '0');else res.push_back(t - 10 + 'A');nums /= p;}reverse(res.begin(), res.end());return res;
}

三、测试

测试用例:

#include <iostream>
#include <algorithm>using namespace std;int p_to_ten(string s, int p)  // p进制字符串 转换为 十进制数 
{int res = 0;for(int i = 0; i < s.size(); ++i){res *= p;if(s[i] >= 'A' && s[i] <= 'Z') res += s[i] - 'A' + 10;else res += s[i] - '0';}return res;
}string ten_to_p(int nums, int p)  // 十进制数 转换为 p进制字符串 
{string res;while(nums){int t = nums % p;if(t < 10) res.push_back(t + '0');else res.push_back(t - 10 + 'A');nums /= p;}reverse(res.begin(), res.end());return res;
}int main() {  // 二进制转十进制  std::string binary = "1010";  int decimal_from_binary = p_to_ten(binary, 2);  std::cout << "Binary " << binary << " to decimal: " << decimal_from_binary << std::endl;  // 十进制转二进制  int decimal = 10;  std::string binary_from_decimal = ten_to_p(decimal, 2);  std::cout << "Decimal " << decimal << " to binary: " << binary_from_decimal << std::endl;    // 八进制转十进制  std::string octal = "765";  int decimal_from_octal = p_to_ten(octal, 8);  std::cout << "Octal " << octal << " to decimal: " << decimal_from_octal << std::endl;  // 十进制转八进制  int another_decimal = 501;  std::string octal_from_decimal = ten_to_p(another_decimal, 8);  std::cout << "Decimal " << another_decimal << " to octal: " << octal_from_decimal << std::endl;  // 十进制转十六进制  int hex_decimal = 2765;  std::string hex_uppercase = ten_to_p(hex_decimal, 16);  std::cout << "Decimal " << hex_decimal << " to hex: " << hex_uppercase << std::endl;  // 十六制转十进制  std::string hex = "ACD";  int decimal_from_hex = p_to_ten(hex, 16);  std::cout << "Hex " << hex << " to decimal: " << decimal_from_hex << std::endl;  return 0;  
}

测试结果:

Binary 1010 to decimal: 10
Decimal 10 to binary: 1010
Octal 765 to decimal: 501
Decimal 501 to octal: 765
Decimal 2765 to hex: ACD
Hex ACD to decimal: 2765--------------------------------
Process exited after 0.114 seconds with return value 0
请按任意键继续. . .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日学习笔记:C++ STL算法之容器元素复制与搬移

本文API 复制元素&#xff1a; copy() copy_if(....,op) copy_n() copy_backward() 搬移元素&#xff1a; move() move_backward() 复制元素 搬移元素

SQL注入利用学习-Union联合注入

联合注入的原理 在SQL语句中查询数据时&#xff0c;使用select 相关语句与where 条件子句筛选符合条件的记录。 select * from person where id 1; #在person表中&#xff0c;筛选出id1的记录如果该id1 中的1 是用户可以控制输入的部分时&#xff0c;就有可能存在SQL注入漏洞…

Python爬虫与API交互:如何爬取并解析JSON数据

目录 前言 一、什么是API和JSON数据 二、准备环境 三、发送API请求并获取数据 四、解析JSON数据 五、完整代码示例 六、总结 前言 随着互联网的发展&#xff0c;越来越多的网站提供了API接口&#xff0c;供开发者获取实时数据。在爬虫领域中&#xff0c;与API交互并解析…

SpringBoot通过token实现用户互踢功能

认识token 所谓token&#xff0c;既用户能够在一定时间内证明自己身份的一长串字符串。正常的使用流程为&#xff1a;用户第一次登入——》服务器为该用户签发一份token——》进行其他服务请求时携带上token——》服务器判断此token在有效期内——》放行此次请求。 在上述过程…

Pytorch中nn.Linear使用方法

nn.Linear定义一个神经网络的线性层&#xff1a; torch.nn.Linear(in_features, # 输入的神经元个数out_features, # 输出神经元个数biasTrue # 是否包含偏置)nn.Linear其实就是对输入&#xff08;n表示样本数量&#xff0c;i表示样本特…

【数据结构与算法】力扣 142. 环形链表 II

题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统…

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第二套

华为海思校园招聘-芯片-数字 IC 方向 题目分享&#xff08;有参考答案&#xff09;——第二套&#xff08;共九套&#xff0c;每套四十个选择题&#xff09; 部分题目分享&#xff0c;完整版获取&#xff08;WX:didadidadidida313&#xff0c;加我备注&#xff1a;CSDN huawei…

Git-LFS 远程命令执行漏洞 CVE-2020-27955 漏洞复现

今天遇到了一个比较有意思的洞&#xff0c;复现一下下.......... 漏洞描述 Git LFS 是 Github 开发的一个 Git 的扩展&#xff0c;用于实现 Git 对大文件的支持 一些受影响的产品包括Git&#xff0c;GitHub CLI&#xff0c;GitHub Desktop&#xff0c;Visual Studio&#xff0…

51单片机之自己配串口寄存器实现波特率9600

本配置是根据手册进行开发配置的 1、首先配置SCON 所以综上所诉 SCON 0x40 &#xff08;0100 0000&#xff09; 2、PCON不用配置 3、配置定时器1 4、波特率的计算 5、配置AUXR 6、对比 7、实现 8、优化&#xff08;实现字符串&#xff09; 引入TI &#xff08;智能延时&…

对于嵌入式工程师,需要掌握的知识是广还是精?

我刚开始接触嵌入式的时候&#xff0c;感觉学这个好变态啊。 要学的东西太多了&#xff0c;数字电路、模拟电路、C语言、汇编、51单片机、Protel 99SE、Pcb Layout、STM32单片机、RTOS、Linux、ARM等等.... 可以说&#xff0c;随便拿个魔法电路出来&#xff0c;想达到精的程度&…

朋友圈文案示例

对于一张留着深思表情的人物照片&#xff1a;‘眼中的光芒胜过千言万语&#xff0c;沉思的瞬间&#xff0c;抚摩心灵的深处。 对于一张微笑着的老人肖像&#xff1a;‘满布皱纹的笑容&#xff0c;记录着岁月的沉淀和生活的甘甜。 对于一张孩子好奇探索的照片&#xff1a;‘童真…

【C++】C++11可变参数模板

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 可变参数模板的定义…

算法训练营第35天|LeetCode 860.柠檬水找零 406.根据身高重建队列 452.用最少数量的箭引爆气球

LeetCode 860.柠檬水找零 题目链接&#xff1a; LeetCode 860.柠檬水找零 解题思路&#xff1a; 枚举法&#xff0c;写出所有找零的情况。 代码: class Solution { public:bool lemonadeChange(vector<int>& bills) {if(bills[0]!5) return false;unordered_ma…

Java绘图坐标体系

一、介绍 下图说明了Java坐标系。坐标原点位于左上角&#xff0c;以像素为单位。在Java坐标系中&#xff0c;第一个是x坐标&#xff0c;表示当前位置为水平方向&#xff0c;距离坐标原点x个像素&#xff1b;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐…

git lfs使用(huggingface下载大模型文件)

0、git lfs是Git的一个扩展工具,用于管理大型文件(如音视频文件、数据集等),避免将它们存储在Git仓库中,而是单独存储在Git LFS服务器上。 1. 安装 Linux安装步骤&#xff1a; curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo b…

Qt | .pro开发经验笔记

Qt | .pro开发经验笔记 【1】 Qt中 += 和 *= 的区别【2】构建识别平台【3】构建定位版本【4】构建引入第三方库【5】QCustomplot绘图性能的改善【6】Qt4/Qt5/Qt6版本控制【7】pro文件中写上版本号、程序图标、产品名称、版权所有、文件说明等信息(Qt5才支持)【8】管理员运行程…

matlab 直方图及分布拟合

datanormrnd(0,5,[1,500]); %频数图 histogram(data,30); %频率图 histogram(data,30,Normalization,probability);%分布拟合方法一 histfit(data,30); %直方图&正态分布拟合 xlim([-16,16]); %x范围 %单独画拟合曲线&#xff08;based on&#xff1a;频数直方图&#xff0…

LLM大语言模型(九):LangChain封装自定义的LLM

背景 想基于ChatGLM3-6B用LangChain做LLM应用&#xff0c;需要先了解下LangChain中对LLM的封装。本文以一个hello world的封装来示例。 LangChain中对LLM的封装 继承关系&#xff1a;BaseLanguageModel——》BaseLLM——》LLM LLM类 简化和LLM的交互 _call抽象方法定义 ab…

SpringBoot和SpringCloud,SpringCloudAlibaba版本依赖关系

SpringBoot和SpringCloud,SpringCloudAlibaba版本依赖关系 版本说明 原始文档 毕业版本依赖关系(推荐使用) 由于 Spring Boot 3.0&#xff0c;Spring Boot 2.7~2.4 和 2.4 以下版本之间变化较大&#xff0c;目前企业级客户老项目相关 Spring Boot 版本仍停留在 Spring Boot…

操作系统理论知识快速总览

操作系统整体架构 搬出考研时的思维导图 操作系统主要分为 批处理系统(老古董&#xff0c;基本不用了)实时操作系统(嵌入式中使用较多&#xff0c;RTOS)分时操作系统(PC中使用较多&#xff0c;Linux&#xff0c;Windows) 分时操作系统和实时操作系统的使用场景不同&#xf…