十进制转任意进制(以及任意进制来回转换<了解>)

 十进制转任意进制:

#include <iostream> 
#include <vector>   
#include <string>   

using namespace std; 

// 将十进制数转换为P进制形式的字符串
string toBase(int num, int base) {
    string result = ""; // 初始化结果字符串为空
    while (num > 0) { // 当num大于0时执行循环
        int digit = num % base; // 计算num除以base的余数
        
        char digitChar; // 定义字符变量用于表示余数对应的字符
        
        if (digit >= 10) { // 如果余数大于等于10
            digitChar = 'A' + digit - 10; // 将余数转换为对应的字母(大写)
        } 
		else { // 否则余数为个位数
            digitChar = '0' + digit; // 将余数转换为对应的字符
        }
        
        result = digitChar + result; // 将当前字符添加到结果字符串的开头
        num /= base; // 更新num为num除以base的商
    }
    return result; // 返回转换后的P进制字符串
}

int main() {
	cout << "请输入需要转换的数字x和进制数P:"; 
	int x;
	cin >> x;
    int P; 
    cin >> P; 
	cout <<  toBase(x,P);

    return 0; 
}

 几个案例解释:

案例一:

  1. 用户输入: 用户输入两个值:xP。在这个例子中,x 为66,P 为4。

  2. 调用 toBase 函数: 函数 toBase 接受两个参数:要转换的十进制数 num(这里是66)和目标进制数 base(这里是4)。

  3. 循环计算

    • 第一次循环
      • 计算 66 % 4 = 2,余数为2。对应的字符是 '2'
      • 66 / 4 = 16,商为16。更新 num 为16。
    • 第二次循环
      • 计算 16 % 4 = 0,余数为0。对应的字符是 '0'.
      • 16 / 4 = 4,商为4。更新 num 为4。
    • 第三次循环
      • 计算 4 % 4 = 0,余数为0。对应的字符是 '0'
      • 4 / 4 = 1,商为1。更新 num 为1。
    • 第四次循环
      • 计算 1 % 4 = 1,余数为1。对应的字符是 '1'
      • 1 / 4 = 0,商为0,循环结束。

    由于 result 是逆序构建的,结果字符串为 '1002'

  4. 输出结果: 将 toBase 的结果输出至标准输出流。 最终结果为 '1002',即66转为4进制的表示是 '1002'

案例二: 

  1. 用户输入: 用户输入两个值:xP。在这个例子中,x 为666,P 为24。

  2. 调用 toBase 函数: 函数 toBase 接受两个参数:要转换的十进制数 num(这里是666)和目标进制数 base(这里是24)。

  3. 循环计算

    • 第一次循环
      • 计算 666 % 24 = 18,余数为18。对应的字符是 'I'
      • 666 / 24 = 27,商为27。更新 num 为27。
    • 第二次循环
      • 计算 27 % 24 = 3,余数为3。对应的字符是 '3'
      • 27 / 24 = 1,商为1。更新 num 为1。
    • 第三次循环
      • 计算 1 % 24 = 1,余数为1。对应的字符是 '1'
      • 1 / 24 = 0,商为0,循环结束。

    由于 result 是逆序构建的,结果字符串为 '1318'

  4. 输出结果: 将 toBase 的结果输出至标准输出流。 最终结果为 '1318',即666转为24进制的表示是 '1318'

案例三: 

  1. 用户输入: 用户输入两个值:xP。在这个例子中,x 为999,P 为36。

  2. 调用 toBase 函数: 函数 toBase 接受两个参数:要转换的十进制数 num(这里是999)和目标进制数 base(这里是36)。

  3. 循环计算

    • 第一次循环
      • 计算 999 % 36 = 27,余数为27。对应的字符是 'R'
      • 999 / 36 = 27,商为27。更新 num 为27。
    • 第二次循环
      • 计算 27 % 36 = 27,余数为27。对应的字符是 'R'
      • 27 / 36 = 0,商为0,循环结束。

    由于 result 是逆序构建的,结果字符串为 'RR'

  4. 输出结果: 将 toBase 的结果输出至标准输出流。 最终结果为 'RR',即999转为36进制的表示是 'RR'

任意进制之间的转换: 

#include <iostream>   
#include <vector>     
#include <string>     
  
using namespace std;   
  
// 将十进制数转换为P进制形式的字符串  
string toBase(int num, int base) {
    string result = ""; // 初始化结果字符串为空
    while (num > 0) { // 当num大于0时执行循环
        int digit = num % base; // 计算num除以base的余数
        
        char digitChar; // 定义字符变量用于表示余数对应的字符
        
        if (digit >= 10) { // 如果余数大于等于10
            digitChar = 'A' + digit - 10; // 将余数转换为对应的字母(大写)
        } 
		else { // 否则余数为个位数
            digitChar = '0' + digit; // 将余数转换为对应的字符
        }
        
        result = digitChar + result; // 将当前字符添加到结果字符串的开头
        num /= base; // 更新num为num除以base的商
    }
    return result; // 返回转换后的P进制字符串
}
  
// 将P进制数(以字符串形式给出)转换为十进制数  
int fromBase(const string& num, int base) {  
    int result = 0;  
    int power = 1;  
    for (int i = num.size() - 1; i >= 0; --i) {  
        char digitChar = num[i];  
        int digit = 0;  
        if (digitChar >= '0' && digitChar <= '9') {  
            digit = digitChar - '0';  
        } else if (digitChar >= 'A' && digitChar <= 'Z') {  
            digit = digitChar - 'A' + 10;  
        } else if (digitChar >= 'a' && digitChar <= 'z') {  
            digit = digitChar - 'a' + 10;  
        } else {  
            cerr << "Invalid character in input string!" << endl;  
            return -1; // 返回-1表示输入字符串中有无效字符  
        }  
        result += digit * power;  
        power *= base;  
    }  
    return result;  
}  
  
int main() {  //仅仅在调用第二个函数 
    cout << "请输入需要转换的数字x(以字符串形式给出)和进制数P:";   
    string x;  
    cin >> x;  
    int P;   
    cin >> P;   
  
    // 检查进制数是否合法(应在2到36之间)  
    if (P < 2 || P > 36) {  
        cerr << "Invalid base! Base should be between 2 and 36." << endl;  
        return 1;  
    }  
  
    int decimalValue = fromBase(x, P);  
    if (decimalValue != -1) {  
        cout << "转换后的十进制数为: " << decimalValue << endl;  
    }  
  
    return 0;   
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最常用的AI工具

在日常工作生活中&#xff0c;我试用了几十种AI人工智能工具&#xff0c;下面我来推荐下我最常使用&#xff0c;也是最方便快捷的AI工具。 1百度文心一言 文心一言是一个综合性的大语言模型&#xff0c;整合了很多优秀的提示词&#xff0c;尤其是文心4.0大模型&#xff0c;在中…

做私域,朋友圈到底该怎么发?

说到做私域&#xff0c;很多人都会问&#xff1a;朋友圈该怎么发&#xff1f;相信大家的朋友圈早已经被各种广告攻占了&#xff0c;很多也都被大家屏蔽了。但如果要做私域&#xff0c;单纯发广告是行不通的&#xff0c;可是现在依然有很多人&#xff0c;认为做私域就是狂发朋友…

网络基础(1)网络编程套接字TCP,守护进程化

TCP协议 下面我们来学习一下TCP套接字的使用。 也就是使用一下基本的接口。首先TCP套接字的使用和UDP套接字的使用是大同小异的&#xff0c;但是多了一些步骤。 这里回顾一下&#xff1a;UDP是不可靠的&#xff0c;无连接的协议。而TCP则是可靠的&#xff0c;面向连接的协议…

护眼台灯品牌排行前十名有哪些?最新护眼台灯品牌排行前十名分享

在近几年&#xff0c;一个引人关注的健康现象是青少年近视问题的日益加剧。统计数字显示&#xff0c;近视的发病率不断攀升&#xff0c;令人忧心地发现&#xff0c;许多才刚步入小学一年级的孩子们&#xff0c;便已佩戴起了厚重的眼镜。其中最主要的原因就在于学习过程对数码设…

高实时、高可靠的微内核操作系统——鸿道Intewell

近年来&#xff0c;我国不断推进工业转型升级&#xff0c;力求实现从传统工业大国向现代工业强国的跨越。想要在新一轮科技革命中“超车”&#xff0c;需要从多个维度进行深度布局和全面发力。 ——科技创新是核心驱动力 积极推动工业结构的优化和升级&#xff0c;通过发展新…

鸿蒙OpenHarmony南向:【Hi3516标准系统入门(IDE方式)】

Hi3516标准系统入门&#xff08;IDE方式&#xff09; 注意&#xff1a; 从3.2版本起&#xff0c;标准系统不再针对Hi3516DV300进行适配验证&#xff0c;建议您使用RK3568进行标准系统的设备开发。 如您仍然需要使用Hi3516DV300进行标准系统相关开发操作&#xff0c;则可能会出现…

Windows设置Redis为开机自启动

前言 Redis作为当前最常用的当前缓存技术&#xff0c;基本上Web应用中都有使用。所以&#xff0c;每次我们在本地启动项目前&#xff0c;都必须将Redis服务端启动。但是&#xff0c;每次都要去启动Redis就很麻烦&#xff0c;有没有办法做到开机自动启动Redis呢&#xff1f;这当…

leetCode69. x 的平方根

leetCode69. x 的平方根 题目思路 常见的二分法模板&#xff08;背过就行&#xff0c;模板而已&#xff09; // 区间[L,R]被划分为[L,mid]和[mid 1, R]时使用这个模板 int bsearch_1(int l, int r){while(l < r){int mid l r >> 1;if(check(mid)) r mid; //che…

CoPilot 产品体验:提升 OpenNJet 的控制管理和服务提供能力

文章目录 前言系统架构介绍CoPilot 配置CoPilot 插件规范 体验 CoPilot 实例CoPilot: Broker 实例CoPilot: Ctrl 实例 开发其他语言编写的 CoPilot目标主要思路具体实现执行 go 程序代码 功能扩展总结 前言 CoPilot 是 OpenNJet 的一个重要组成部分&#xff0c;它在 Master-Wo…

我独自升级崛起怎么下载 我独自升级崛起下载教程来了

《我独自升级&#xff1a;崛起》作为一款炙手可热的游戏&#xff0c;其非凡的品质迅速聚拢了大量玩家的目光&#xff0c;就如同磁铁吸引铁屑一般&#xff0c;展现了优质游戏所固有的强大吸引力。在这款游戏中&#xff0c;每位玩家都能化身成为拥有超凡能力的英雄&#xff0c;体…

物联网技术、测试要点和测试标准

物联网定义 物联网&#xff1a;利用嵌入式电子设备、微芯片等连接车辆、家电、医疗设备&#xff0c;以收集和交换不同类型的数据&#xff0c;被称为物联网。借助物联网&#xff0c;用户能够远程控制设备&#xff0c;可以实现不同设备的互联。在现实生活中物联网开始有越来越多…

使用开放式用户通信连接两台西门子S71200plc

步骤1.在项目中创建两台PLC。 步骤2.分别设置两个PLC的参数。 plc1 plc2 步骤3.对两个plc进行组态 步骤4.在plc1和plc2中各自创建DB块&#xff0c;用于通信。 须在块的属性中取消优化块的访问选项。 plc1 plc2 步骤5.往plc1的main块中编写代码。 步骤6.往plc2的main块中编写…

Python爬虫--Urllib基础

1. urlretrieve Urllib 库也是类似 request 库&#xff0c;用来解析html的 首先讲 urlretrieve 子模块 这个模块的作用是将网页下载到本地 语法&#xff1a; urlretrieve(网址,本地地址) 例如&#xff1a; 这样就可以了&#xff0c;他会将百度网页下载到本地D盘下&#x…

【iOS】——浅析CALayer

文章目录 一、CALayer介绍二、UIview与CALayer1.区别2.联系 三、CALayer的使用1.初始化方法2.常用属性 四.CALayer坐标系1.position属性和anchorPoint属性2.position和anchorPoint的关系3.position、anchorPoint和frame的关系 五、CALayerDelegate六、CALayer绘图机制1.绘图流程…

AGI|基于LangChain实现的三种高级RAG检索方法

一、前言 RAG(Retrieval-Augmented Generation)检索增强生成&#xff0c;是现如今基于企业私域知识的问答应用所使用的主流技术之一。相较于重新训练基于私域知识的大模型来说&#xff0c;RAG没有额外的预训练成本&#xff0c;且回答效果与之相当。 但在实际应用场景中&#xf…

容器Docker:轻量级虚拟化技术解析

引言 随着云计算和虚拟化技术的飞速发展&#xff0c;容器技术以其轻量级、高效、可移植的特性&#xff0c;逐渐成为了软件开发和部署的新宠。在众多容器技术中&#xff0c;Docker以其简单易用、功能强大的特点&#xff0c;赢得了广泛的关注和应用。本文将全面介绍Docker的基本概…

数据挖掘算法原理与实践:决策树

第2关&#xff1a;决策树算法原理 任务描述 本关任务&#xff1a;根据本关所学知识&#xff0c;完成 calcInfoGain 函数。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 信息熵&#xff1b;条件熵&#xff1b;信息增益。 信息熵 信息是个很抽象的概念。…

04-xss获取cookie实验

二、开发XSS服务器端 1、确认实验环境 攻击者服务器&#xff1a;192.168.74.134&#xff0c;将获取到cookie数据保存到该服务器的数据库中&#xff0c;运行PHP代码暴露一个接收Cookie的URL地址。 正常Web服务器&#xff1a;192.168.74.133&#xff0c;用于正常的用户访问的目…

Linux磁盘IO、网络IO、零拷贝详解

一、什么是I/O&#xff1f; 在计算机操作系统中&#xff0c;所谓的I/O就是输入&#xff08;input&#xff09;和输出&#xff08;output&#xff09;,也可以理解为读&#xff08;read&#xff09;和写&#xff08;write&#xff09;,针对不同的对象&#xff0c;I/O模式可以划分…
最新文章