刷题日记——进制转换3(机试)

news2024/11/16 16:32:15

题目——进制转换3

在这里插入图片描述

锲而不舍——先给自己立一个纪念碑

-

思路

  1. 根据输入信息,将输入值从m进制转换成10进制
  2. 将10进制数据转换成n进制数据输出

输入值从m进制转换成10进制

  1. 将输入值视作字符串

  2. 依次取出字符串字符,

    • 如果是数字: 减去‘0’得到真实值
    • 如果是字母:减去‘A’+10到真实值,注意,这里要减去10,我提交了一万遍才过很大程度上就是忘记了这个10
  3. 计算每一位真实值*所在位数权值(例如1000中的1,位于千位,权值是1000),对于m进制数,相应 位的权值 = 该位真实值 ∗ m 该位在第几位 位的权值=该位真实值*m^{该位在第几位} 位的权值=该位真实值m该位在第几位

  4. 算出每一位的值求和即可转为实际的10进制值

将10进制数据转换成n进制数据输出

  1. 将10进制数据每次对n取余,得到的数字转换成相应的字符存到字符串内
  2. 将字符串当作字符数组,倒序输出,即为所要的n进制数据

上述方法在计组等书中有描述,类似下图(注意,他除2没有写出来,其实是不太规范的):(来自知乎作者@chee【十进制转成二进制的两种方式】)
在这里插入图片描述

数字和字母的输入输出问题

显然,输入进制由2~36进制不等,囊括了从0到1,从a到z的所有组合,那么输入和输出必定是字符串形式
这就带来两个问题,一个是输入接收字母转换成数字,另一个是输出数字转换成字母,这两个问题关键就是字母和数字相互转换问题,有两种解决思路:

思路一:用map

设置两个map,一个从char到int,另一个从int到char,看上去无比便捷,但问题是要自己一个个对应地去写,总共要写36*2=72个对,非常麻烦,因此不可行。
当然我一开始没想这么多,还真用的这个办法,如下图,但是写了一半就不想写了,真麻烦!!!
在这里插入图片描述

思路二:用函数计算然后返回

众所周知,ascii中0到1和a到z和A到Z都是有顺序关系的,计算一下就能够得到真实的数值,因此可以设置一个函数输入并返回,但是要注意,数字的字符和字母的字符计算有所不同,字母计算时候要相应的加减10,因为a代表的是10,数字字符就没有这些要考虑的。
就是这个10,让我一步步debug了半天,好消息是我会用codeblock来debug了,原本感觉丑陋的codeblock界面用多了发现也是风韵犹存。

int mymap(char num){
  if(num>='0'&&num<='9'){
    return num-'0';
  }else{
    return num-'A'+10;
  }
}

char M_map(int num){
  if(num>=0&&num<=9){
    return num+'0';
  }else{
    return num+'a'-10;
  }
}

思路叙述完毕,接下来让我们恭迎100%AC的代码驾到!!!!

#include <cstdio>
#include <map>
#include <string>
using namespace std;

int mymap(char num){
  if(num>='0'&&num<='9'){
    return num-'0';
  }else{
    return num-'A'+10;
  }
}

char M_map(int num){
  if(num>=0&&num<=9){
    return num+'0';
  }else{
    return num+'a'-10;
  }
}

int main(){
	int m,n;
	char num[10000];
	scanf("%d%d",&m,&n);
	scanf("%s",num);
	string str = num;
	unsigned long long t_10 = 0;
	for(int i=0;i<str.length();i++){
		unsigned long long temp = mymap(str[i]);
		for(int j=0;j<str.length()-i-1;j++){
			temp *= m;
		}
		t_10 += temp;
	}
	//现在t10是十进制数了
	string target = "";
	while(t_10>=n){
		unsigned long long number = t_10%n;
		target += M_map(number);
		t_10 /= n;
	}
	target += M_map(t_10);
	for(int i=target.length()-1;i>=0;i--){
    	printf("%c",target[i]);
	}
	return 0;
}

AC情况——最后再立一个纪念碑

在这里插入图片描述

最后总结一下,这里面遇到的坑(我是一踩一个准,爬坑爬半天)

  • 输入输出数字和字母,如何转换字母和数字的ascii
  • 转换高进制极易出现数值过大的情况,必须采用long long,我直接用unsigned long long
ok,就到这里,我们下题见。

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

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

相关文章

初识 React:安装和初步使用指南

文章目录 前言一、React 是什么&#xff1f;1.组件化开发2.虚拟 DOM3.单向数据流4.生态系统丰富 二、安装1.准备工作2.下载react 三、探索 React 应用总结 前言 在当今的 Web 开发领域&#xff0c;React 已经成为了一个备受推崇的技术。它的组件化、灵活性和高效性使得它成为了…

栅格地图、障碍物地图与膨胀地图(栅格地图)

在ROS中&#xff0c;地图是非常基本的元素&#xff0c;特别对于2D激光SLAM而言&#xff0c;栅格地图可以说是必不可少的元素。机器人在需要前往目标点时&#xff0c;需要在栅格地图中找到一条合适的路径从当前点到达目标点&#xff0c;这部分内容在move_base中有了详细的接口&a…

MySql数据库从0-1学习-第五天事务和索引

事务 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作 要么同时成功&#xff0c;要么同时失败。 注意事项,默认事务是自动提交的,也就是说,当执行一条DML语句,MySql会立即隐…

“低价竞争”仍在继续,分期免息成商家新武器

近日&#xff0c;在京东618商家生态伙伴大会上&#xff0c;京东推出各项政策&#xff0c;尽全力让所有合作伙伴赢在京东618、赢在京东。京东金融也将在618大促期间&#xff0c;为各位商家带来极具竞争力的金融产品和大促政策。 举例来说&#xff0c;大促期间&#xff0c;“京东…

分类预测 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机数据…

小试牛刀!

1.从双倍数组中还原原数组&#xff08;力扣&#xff0c;vector&#xff09; java式c解法。 class Solution { public:vector<int> findOriginalArray(vector<int>& changed) {int n changed.size();if(n % 2 1) return {};map<int, int> mp;for(int c…

02 - Git 之命令 + 删除 + 版本控制 + 分支 + 标签 + 忽略文件 + 版本号

1 Git相关概念 1.1 以下所谈三个区&#xff0c;文件并不只是简单地在三个区转移&#xff0c;而是以复制副本的方式转移 使用 Git 管理的项目&#xff0c;拥有三个区域&#xff0c;分别是 Working area工作区&#xff08;亦称为 工作树Working Tree&#xff09;、stage area …

【Web】HTML基础

专栏文章索引&#xff1a;Web 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、HTML介绍 1.HTML 定义 2.标签语法 3.HTML 基本骨架 4.标签的关系 5.HTML 注释 二、标签 1.排版标签 1.1 标题标签 1.2 段落标签 1.3 换行标签 1.4 水平线标签 1.5 文本格…

【Spring】之基础概念和使用

&#x1f3c0;&#x1f3c0;&#x1f3c0;来都来了&#xff0c;不妨点个关注&#xff01; &#x1f3a7;&#x1f3a7;&#x1f3a7;博客主页&#xff1a;欢迎各位大佬! 文章目录 1. Spring的概述1.1 什么是容器&#xff1f;1.2 什么是IoC&#xff1f;1.3 什么是DI&#xff1f…

(二十八)Flask之wtforms库【上手使用篇】

目录&#xff1a; 每篇前言&#xff1a;用户登录验证&#xff1a;用户注册验证&#xff1a;使用示例&#xff1a; 抽象解读使用wtforms编写的类&#xff1a;简单谈一嘴&#xff1a;开始抽象&#xff1a; 每篇前言&#xff1a; &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;【…

多任务学习,在共享层,究竟在共享什么?

在多任务学习中&#xff0c;共享层所共享的主要是网络结构和参数。具体来说&#xff0c;当多个任务在共享层进行参数硬共享时&#xff0c;它们使用的是相同的网络结构&#xff08;例如三层全连接神经网络&#xff09;&#xff0c;并且这些网络层的权重&#xff08;weights&…

Java工具类:批量发送邮件(带附件)

​ 不好用请移至评论区揍我 原创代码,请勿转载,谢谢! 一、介绍 用于给用户发送特定的邮件内容,支持附件、批量发送邮箱账号必须要开启 SMTP 服务(具体见下文教程)本文邮箱设置示例以”网易邮箱“为例,其他如qq邮箱或企业邮箱均可,只要在设置中对应开启SMTP及授权码等操…

css中设置元素大小的属性block-size

block-size 是 CSS 中的一个属性&#xff0c;它用于设置元素的块级尺寸&#xff08;即元素的高度&#xff09;。这个属性是 height 和 max-height 的逻辑组合&#xff0c;允许你同时设置元素的最小和最大高度。 这些属性旨在让布局不再依赖于传统的物理方向&#xff08;如上下左…

爬虫 | 基于 Python 实现有道翻译工具

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目旨在利用 Python 语言实现一个简单的有道翻译工具。有道翻译是一款常用的在线翻译服务&#xff0c;能够实现多种语言的互译&#xff0c;提供高质量的翻译结果。 目录 一、项目功能 二、注意事项 三、代码解析 1. 导入…

eclipse配置SVN和Maven插件

3、 安装SVN插件 使用如下方法安装 Help–Install New Software 注意&#xff1a;目前只能安装1.8.x这个版本的SVN&#xff0c;如果使用高版本的SVN&#xff0c;在安装SVN和maven整合插件的时候就会报错&#xff0c;这应该是插件的bug。 点击Add name: subclipse location…

隐式/动态游标的创建与使用

目录 将 emp 数据表中部门 10 的员工工资增加 100 元&#xff0c;然后使用隐式游标的 %ROWCOUNT 属性输出涉及的员工数量 动态游标的定义 声明游标变量 打开游标变量 检索游标变量 关闭游标变量 定义动态游标&#xff0c;输出 emp 中部门 10 的所有员工的工号和姓名 Orac…

编程入门(四)【计算机网络基础(由一根网线连接两个电脑开始)】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 前言两个电脑如何互连呢&#xff1f;集线器、交换机与路由器总结 前言 当你有…

【IC前端虚拟项目】接口分析与agent组件生成

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 到目前为止关于环境的准备工作都已经完成了,甚至验证环境的大体结构我们也已经画好了,再来看一下: 于是乎呢就可以大张旗鼓的开始咱们验证环境的搭建了!看上面这个结构图,里面除了mvu作为DUT,其他…

【C语言】冒泡排序算法详解

目录 一、算法原理二、算法分析时间复杂度空间复杂度稳定性 三、C语言实现四、Python实现 冒泡排序&#xff08;Bubble Sort&#xff09;是一种基础的排序算法。它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。遍历数列…

HackMyVM-BaseME

目录 信息收集 arp nmap WEB web信息收集 gobuster hydra 目录检索 ssh 提权 get user sudo base64提权 get root 信息收集 arp ┌─[rootparrot]─[~/HackMyVM] └──╼ #arp-scan -l Interface: enp0s3, type: EN10MB, MAC: 08:00:27:16:3d:f8, IPv4: 192.168…