[在不同进制下的长除法] 正整数的任意进制转换

正整数的任意进制转换

题目描述

将 p 进制 n 转换为 q 进制。p 和 q 的取值范围为【2,36】,其中,用到的数码按从小到大依次为:0,1,2,3,4,5,6,7,8,9,A,B,…,Z,不考虑小写字母。
注意:n 的长度不超过50位。
三个数之间用逗号间隔。

关于输入

1+m 行,
第1行为 m,表示后面有 m 行,m不小于1.
其后的m行中,每行3个数: 进制p,p进制数n,以及进制 q。
三个数之间用逗号间隔

关于输出

转换后的 q 进制数。

例子输入

6
18,2345678A123,18
15,23456,18
12,2345678,20
16,12345678,23
25,3456AB,21
18,AB1234567,22

例子输出

2345678A123
114E0
22B7A4
21A976L
7C2136
22JF0G367

解题分析

算法步骤

  1. 读取输入

程序首先读取一个整数 m,表示将要处理的数字组数。
接下来,对于每组数字,程序读取三个值:
p:当前的进制。
n:表示在 p 进制下的数(以字符串形式给出)。
q:目标进制。
2. 字符串转数字

将 p 进制的字符串 n 转换为数字。
对于字符串中的每个字符,根据其表示的数值进行转换。例如,‘A’ 转换为 10,‘3’ 转换为 3。
考虑到进制可能大于 10,因此字母字符(A-Z)也将被转换为相应的数字(10-35)。
3. 进制转换

使用“除 q 取余法”进行进制转换。
从 n 的最高位开始,逐位处理数字。
对于每一位,将其与前一位的余数相加,然后乘以 p,再除以 q。
每次除法操作后,余数保存下来,并将商作为该位在 q 进制下的值。
继续处理直到所有位都完成转换。
4. 输出结果

由于转换过程是从高位向低位进行的,因此最后得到的数字序列是反序的。
在输出前,需要将数字序列反转,以获得正确的 q 进制数。
例子说明

以输入 “16,12345678,23” 为例,程序将执行以下步骤:

读取输入:16(当前进制),“12345678”(16进制数),23(目标进制)。
字符串转数字:“12345678” 在 16 进制下表示的数值会被转换为数字形式。
进制转换:使用除 23 取余法,从 “12345678” 的最高位开始,逐步转换为 23 进制数。
输出结果:得到的 23 进制数是反序的,需要反转后输出。
通过这种方法,程序能够高效且准确地将任何给定的 p 进制数转换为 q 进制数。

代码实现

#include <stdio.h>char map[36]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int p,q;
char n[55];
int a[55],b[1000];int main(void) { int m; scanf("%d",&m);getchar();while(m--){scanf("%d",&p);getchar();int index=0; char ch;while((ch=getchar())!=','){n[index++]=ch;}n[index]='\0';scanf("%d",&q);//printf("%d,%s,%d\n",p,n,q);int len=strlen(n);for(int i=0;i<len;i++){a[i]=n[i]>='A'? (n[i]-'A'+10):n[i]-'0';}int lenb=0,flag=0;while(1){int res=0,temp=0;for(int i=0;i<len;i++){res=(a[i]+temp*p)%q;a[i]=(a[i]+temp*p)/q;temp=res;}b[lenb++]=res;for(int i=0;i<len;i++){if(a[i]){flag=0;break;}flag=1;}if(flag) break;}for(int i=lenb-1;i>=0;i--){printf("%c",map[b[i]]);}printf("\n");}return 0;
}

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

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

相关文章

Flutter PK jetpack compose区别和选择

Flutter诞生于Chrome团队&#xff0c;是一帮做Web的开发做的跨平台框架&#xff0c;从最开始的设计初衷&#xff0c;就是指向了跨平台这条路&#xff0c;而Compose&#xff0c;则是诞生于Android团队&#xff0c;是为了解决当前View的架构体系不能再继续适应申明式编程的范式而…

使用drawio图表,在团队中,做计划,设计和跟踪项目

使用drawio图表&#xff0c;在团队中&#xff0c;做计划&#xff0c;设计和跟踪项目 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部…

Redis中分布式锁的使用

在分布式系统中&#xff0c;如果使用JVM中的同步锁在高并发的场景下仍然会产生线程安全问题。首先我们来查看在多个服务器时为什么会产生线程安全问题&#xff0c;有这样一个案例&#xff0c;有一件商品购买规则为一个用户只能购买一次&#xff0c;如果使用同步锁锁住用户id&am…

AR助推制造业智能转型:实时远程协作与可视化引领生产创新

制造商面临着多方面的变革&#xff0c;技术的兴起催生了工业物联网&#xff08;IIoT&#xff09;&#xff0c;改变了现代工厂的外貌、系统和流程。同时&#xff0c;全球竞争压力和不断变化的员工队伍要求采用新的员工培训方法&#xff0c;并重新审视工人在工厂中的角色。尽管如…

Linux(13):例行性工作排程

例行性工程 听谓的排程是将工作安排执行的流程之意。 Linux 排程就是透过 crontab 与 at 这两个东西。 两种工作排程的方式&#xff1a; 一种是例行性的&#xff0c;就是每隔一定的周期要来办的事项&#xff1b; 一种是突发性的&#xff0c;就是这次做完以后就没有的那一种&a…

【算法】希尔排序

目录 1. 说明2. 举个例子3. java代码示例4. java示例截图 1. 说明 1.希尔排序是直接插入排序的一种改进&#xff0c;其本质是一种分组插入排序 2.希尔排序采取了分组排序的方式 3.把待排序的数据元素序列按一定间隔进行分组&#xff0c;然后对每个分组进行直接插入排序 4.随着间…

QWebChannel 是 Qt 框架中用于在 Web 页面和 Qt 应用程序之间进行通信的类

QWebChannel 是 Qt 框架中用于在 Web 页面和 Qt 应用程序之间进行通信的类。 QWebChannel 类提供了一种机制&#xff0c;使得 Web 页面可以与 Qt 应用程序进行双向通信。通过 QWebChannel&#xff0c;可以将 Qt 应用程序中的对象暴露给 Web 页面&#xff0c;并通过信号和槽机制…

大型语言模型在实体关系提取中的应用探索

如今LLM(大语言模型)的问答与生成能力已被大家所熟知&#xff0c;很多用户已经亲身体会到了LLM为工作、生活带来的变革。其实&#xff0c;作为NLP(自然语言处理)的集大成者&#xff0c;LLM能为我们提供的能力不限于此。其基本胜任传统NLP技术所能承担的所有任务。如&#xff1a…

[开题报告]基于SpringBoot的艾滋病科普平台的设计与实现

1.选题背景 艾滋病&#xff08;艾滋病毒感染与免疫缺陷综合征&#xff09;是一种严重的传染病&#xff0c;对人类的健康和社会稳定造成了极大的影响。全球范围内&#xff0c;艾滋病已经成为公共卫生领域的重大挑战之一。尽管在科学研究和医疗技术方面取得了一定进展&#xff0…

设置随机种子保证网络可复现性

原文链接&#xff1a;https://zhuanlan.zhihu.com/p/141063432 为什么使用相同的网络结构&#xff0c;跑出来的效果完全不同&#xff0c;用的学习率&#xff0c;迭代次数&#xff0c;batch size 都是一样&#xff1f;固定随机数种子是非常重要的。但是如果你使用的是PyTorch等…

MySQL 8创建数据库、数据表、插入数据并且查询数据

我使用的数据库是MySQL 8。 创建数据库 create database Bookbought; -- 创建数据库Bookbought use Bookbought; -- 使用数据库Bookbought创建数据表 创建用户表bookuser。 create table ## 往allbook里边插入数据(id INT PRIMARY KEY AUTO_INCREMENT, -- id 为 主键userna…

CCKS2023-面向上市公司主营业务的实体链接评测-亚军方案

赛题分析 大赛地址 https://tianchi.aliyun.com/competition/entrance/532097/information 任务描述 本次任务主要针对上市公司的主营业务进行产品实体链接。需要获得主营业务中的产品实体&#xff0c;将该实体链接到产品数据库中的某一个标准产品实体。产品数据库将发布在竞赛…

机器学习决策树ID3算法

1、先去计算总的信息量 2、根据不同指标分别计算对应的信息增益 3、根据算出的信息增益来选择信息增益最大的作为根结点 4、天气中选择一个继续上述过程 5、决策树划分结束

MySQL索引优化实战二

分页查询优化 很多时候我们业务中实现分页功能时可能会用如下SQL来实现&#xff1a; select * from employees LIMIT 10000,10表示从表中中区从10001行开始的10行记录&#xff0c;看似只查了10条记录&#xff0c;但是这条SQL是先读取10010条记录&#xff0c;然后抛弃前10000条…

Spring事务管理介绍

文章目录 Spring事务管理1 Spring事务简介【重点】问题导入1.1 Spring事务作用1.2 需求和分析1.3 代码实现【前置工作】环境准备【第一步】在业务层接口上添加Spring事务管理【第二步】设置事务管理器(将事务管理器添加到IOC容器中)【第三步】开启注解式事务驱动【第四步】运行…

智能优化算法应用:基于黄金正弦算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于黄金正弦算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于黄金正弦算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黄金正弦算法4.实验参数设定5.算法结果6.参考…

STM32的HAL库串口编程

STM32的串口轮询 1. 一天的努力2. 问题3. 中断接收4. 还没有结束1. 一天的努力 今天努力了一天,用STM32CubeIDE为STM32F103C8T6进行编程。遇到了串口麻烦。发送数据非常正常。接收数据碰到了问题,在这里写下来供初学者共勉。 2. 问题 轮询读取。在主程序中添加下面的代码:…

分享一些Git的常用命令

常用命令 命令名称作git config —global user.name 用户名设置用户签名git config —global user.email 邮箱设置用户签名git init初始化本地库git status查看本地库状态git add 文件名添加到暂存区git commit -m “日志信息” 文件名提交到本地库git reflog查看历史记录git r…

gcc栈帧随机化介绍

一、简介 在GCC中&#xff0c;栈帧随机化是一种控制流保护机制&#xff0c;用于防止攻击者利用栈溢出漏洞执行代码注入攻击。栈帧随机化通过在每次程序执行时随机化生成的函数栈帧布局&#xff0c;使得攻击者无法准确预测栈帧的结构&#xff0c;从而对栈进行攻击的难度大大增加…

开启gitlab中远程连接pgsql

1、修改gitlab.rb vim /etc/gitlab/gitlab.rb 配置为&#xff1a; postgresql[enable] true postgresql[listen_address] 0.0.0.0 postgresql[port] 5432 postgresql[data_dir] "/var/opt/gitlab/postgresql/data" 2、gitlab-ctl reconfigure 等待报错 3、修…