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

机试:进制转换问题

十进制转任意进制

简单回忆一下十进制我们是怎么转换成二进制的(短除法):

我们会将十进制数不断的进行除2操作,并且记录下每一次的余数(这个余数就是我们最终求的二进制数的组成部分)。

以下以12D举例,将其转换成二进制数:

                            除2     被除数               -------------   余数

                              2  /     1 2                   ---------------    0    (=12%2)

    商&下一个被除数          6 (=12/2)        --------------     0   (=6%2)

                                          3  (=6/2)         --------------     1     (=3%2)

                                           1 (=3/2)          --------------     1     (=1%2)

                                           0 (=1/2,结束)

计算出的余数由下往上组合就是我们要求的二进制数,即12_{10}\rightarrow 1100_{2}

那么我们就要把这个思路转换成相对应的计算机代码了。

我们仅仅需要一个循环就可以完成这件事:
 

//n是我们待转化的十进制数
int ans[100];//用于存放我们的计算结果
int len=0;//用于记录我们转换的二进制有多少位
while(n!=0){ans[len++]=n%2;//取余运算,将结果保存同时位数len加一n/=2;//记录下一个被除数
}
//输出我们的二进制时,别忘了要逆序输出(短除法)
for(int i=len-1;i>=0;i--){printf("%d",ans[i]);
}

现在我们把这个思路拓展到x进制的转换。

首先,在所有x小于10的x进制转换中,都可以沿用上面的这个思路,只需要更改%2和/2即可:

//n是我们待转化的十进制数,x代表我们要转化的是几进制
int ans[100];//用于存放我们的计算结果
int len=0;//用于记录我们转换的x进制有多少位
while(n!=0){ans[len++]=n%x;//取余运算,将结果保存同时位数len加一n/=x;//记录下一个被除数
}
//输出我们的x进制时,别忘了要逆序输出(短除法)
for(int i=len-1;i>=0;i--){printf("%d",ans[i]);
}

但对于x>10的进制转换,这样做显然不太可行,拿十六进制举例,大于9的数使用字母进行表示。

为了能够将十进制以上和以下进行统一,我们修改以下我们的代码。

注意:以下代码可以适用于所有十进制转任意进制的情况:

#include <stdio.h>
#include <stdlib.h>
#define MAX 30
int main(){int n;char ans[MAX];//更改结果类型,采用char保存结果int len;int x;//代表转成几进制scanf("%d",&x);while(scanf("%d",&n)!=EOF){len=0;while(n!=0){if(n%x<10)ans[len++]=n%x+'0';//小于10直接存数else ans[len++]=n%x-10+'A';//大于10存放字母n/=x;}for(int i=len-1;i>=0;i--){//结果逆序输出printf("%c",ans[i]);}printf("\n");}return 0;
}

任意进制转十进制

同样先来看二进制,我们采用的是乘法。

平时我们想把二进制转十进制很简单,直接按位计算相加就行:

 那么转换成代码我们又该怎么表示呢?

我们从最高位开始计算():

 

 以下代码即为二进制的转换:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 30
int main(){char s[30];//代表二进制数int ans=0;//存储十进制答案scanf("%s",s);int len=strlen(s);for(int i=0;i<len;i++){ans*=2;ans+=s[i]-'0';}printf("%d\n",ans);return 0;
}

拓展到任意进制与上述方法类似,就不再赘述了,直接上代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 30
int main(){char s[30];//代表二进制数int ans=0;//存储十进制答案int x;//用于记录转换为x进制scanf("%d",&x);int len;while(scanf("%s",s)!=EOF){len=strlen(s);ans=0;for(int i=0;i<len;i++){ans*=x;if(s[i]>='0'&&s[i]<='9')ans+=s[i]-'0';else ans+=s[i]-'A'+10;}printf("%d\n",ans);}return 0;
}

大数进制转换

思路来源:大数的进制转换_大数进制转换-CSDN博客

 指路这位大佬。

 题目描述:将一个长度最多为30位数字的十进制非负整数转换为二进制数输出

之前我们在进行十进制转二进制时,不断地在重复模2、除2的操作。但这对于大数来说并不好实现(因为之前我们使用一个整型存储数据,而现在我们使用字符串来存储大数)

大数除法

根据以上那位大佬的思路,我明白了每一次除法运算的内在流程。

除法运算从被除数(344)的最高位开始,每一轮除法都取被除数的一位出来进行运算。

应该进行几轮除法由被除数(344)的位数决定,比如这里344一共有个十百三位,也就需要进行3轮除法。

在每一轮除法中,我们都会得到一个商和余数(回归到余数最本质的定义:剩余的、没有除完的数称为余数,因此在下一轮除法操作时要将上一轮的余数带上)。

所以现在基本上已经理清楚了,我们所要求的除法结果其实就是每一轮的商合在一起的结果。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main() {char x[1000];//我们的十进制待转换数char* tmp;//用于存储被除数int len = strlen(x);//用于保存被除数的长度//以下定义看名字应该也知道是什么,写的是拼音int yushu, shang,  beichushu;int count;//count用于记录下一轮被除数应得的长度char ans[1000];//用于记录二进制结果int ans_len;//代表二进制结果的位数while(scanf("%s", x)!=EOF){tmp=x;len=strlen(x);ans_len=0;//以下循环是计算一个完整的二进制数的过程while (len != 0)//当被除数不等于0的时候,就需要进行循环{count = 0;yushu = 0;shang = 0;//这个循环才是一轮除法的循环过程for (int i = 0; i < len; i++) {beichushu = yushu * 10 + tmp[i] - '0';yushu = beichushu % 2;shang = beichushu / 2;x[count++] = shang + '0';//记录下每一次运算的商}ans[ans_len++] = yushu + '0';//以下操作是将商前面多余的零删除掉,只留下有效位的操作int j = 0;while (x[j] == '0')j++;len=0;while (j < count) {tmp[len++] = x[j++];}}for (int i = ans_len - 1; i >= 0; i--) {printf("%c", ans[i]);}printf("\n");}return 0;}

 

相关文章:

机试:进制转换问题

十进制转任意进制 简单回忆一下十进制我们是怎么转换成二进制的&#xff08;短除法&#xff09;&#xff1a; 我们会将十进制数不断的进行除2操作&#xff0c;并且记录下每一次的余数&#xff08;这个余数就是我们最终求的二进制数的组成部分&#xff09;。 以下以12D举例&a…...

目标检测实战(十五): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)

文章目录 一、目标检测介绍二、YOLOv7介绍三、源码/论文获取四、环境搭建4.1 环境检测 五、数据集准备六、 模型训练七、模型验证八、模型测试九、错误总结9.1 错误1-numpy jas mp attribute int9.2 错误2-测试代码未能跑出检测框9.3 错误3- Command git tag returned non-zero…...

github中fasttext库README官文文档翻译

参考链接&#xff1a;fastText/python/README.md at main facebookresearch/fastText (github.com) fastText模块介绍 fastText 是一个用于高效学习单词表述和句子分类的库。在本文档中&#xff0c;我们将介绍如何在 python 中使用 fastText。 环境要求 fastText 可在现代 …...

WouoUIPagePC端实现

WouoUIPagePC端实现 WouoUIPage是一个与硬件平台无关&#xff0c;纯C语言的UI库&#xff08;目前只能应用于128*64的单色OLED屏幕上&#xff0c;后期会改进&#xff0c;支持更多尺寸&#xff09;。因此&#xff0c;我们可以在PC上实现它&#xff0c;本文就以在PC上使用 VScode…...

W801学习笔记十九:古诗学习应用——下

经过前两章的内容&#xff0c;背唐诗的功能基本可以使用了。然而&#xff0c;仅有一种模式未免显得过于单一。因此&#xff0c;在本章中对其进行扩展&#xff0c;增加几种不同的玩法&#xff0c;并且这几种玩法将采用完全不同的判断方式。 玩法一&#xff1a;三分钟限时挑战—…...

类加载器ClassLoad-jdk1.8

类加载器ClassLoad-jdk1.8 1. 类加载器的作用2. 类加载器的种类&#xff08;JDK8&#xff09;3. jvm内置类加载器如何搜索加载类--双亲委派模型4. 如何打破双亲委派模型--自定义类加载器5. 自定义一个类加载器5.1 为什么需要自定义类加载器5.2 自定义一个类加载器 6. java代码加…...

24年最新AI数字人简单混剪

24年最新AI数字人简单混剪 网盘自动获取 链接&#xff1a;https://pan.baidu.com/s/1lpzKPim76qettahxvxtjaQ?pwd0b8x 提取码&#xff1a;0b8x...

免备案香港主机会影响网站收录?

免备案香港主机会影响网站收录?前几天遇到一个做电子商务的朋友说到这个使用免备案香港主机的完整会不会影响网站的收录问题&#xff0c;这个问题也是站长关注较多的问题之一。小编查阅了百度官方规则说明&#xff0c;应该属于比较全面的。下面小编给大家介绍一下使用免备案香…...

低代码工业组态数字孪生平台

2024 两会热词「新质生产力」凭借其主要特征——高科技、高效能及高质量&#xff0c;引发各界关注。在探索构建新质生产力的重要议题中&#xff0c;数据要素被视为土地、劳动力、资本和技术之后的第五大生产要素。数据要素赋能新质生产力发展主要体现为&#xff1a;生产力由生产…...

代码随想录第三十八天(完全背包问题)|爬楼梯(第八期模拟笔试)|零钱兑换|完全平方数

爬楼梯&#xff08;第八期模拟笔试&#xff09; 该题也是昨天的完全背包排列问题&#xff0c;解法相同&#xff0c;将遍历顺序进行调换 import java.util.*; public class Main{public static void main (String[] args) {Scanner scnew Scanner(System.in);int nsc.nextInt(…...

idea常用知识点随记

idea常用知识点随记 1. 打开idea隐藏的commit窗口2. idea中拉取Git分支代码3. idea提示代码报错&#xff0c;项目编译没有报错4. idea中实体类自动生成序列号5. idea隐藏当前分支未commit代码6. idea拉取新建分支的方法 1. 打开idea隐藏的commit窗口 idea左上角File→Settings…...

(双指针) 有效三角形的个数 和为s的两个数字 三数之和 四数之和

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 一、有效三角形的个数&#xff08;medium&#xff09; 1.1、题目 1.2、讲解算法原理 1.3、编写代码 二、和为s的两个数字 2.1、题目 2.2、讲解算…...

力扣每日一题114:二叉树展开为链表

题目 中等 提示 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同…...

Linux系统下使用LVM扩展逻辑卷的步骤指南

Linux系统下使用LVM扩展逻辑卷的步骤指南 文章目录 Linux系统下使用LVM扩展逻辑卷的步骤指南前言一、逻辑卷管理&#xff08;LVM&#xff09;简介二、扩展逻辑卷步骤1. 检查当前的磁盘布局2. 创建新的分区3. 更新内核的分区表4. 初始化新的物理卷5. 将物理卷添加到卷组6. 调整逻…...

探索AI编程新纪元:从零开始的智能编程之旅

提示&#xff1a;Baidu Comate 智能编码助手是基于文心大模型&#xff0c;打造的新一代编码辅助工具 文章目录 前言AI编程概述&#xff1a;未来已来场景需求&#xff1a;从简单到复杂&#xff0c;无所不包体验步骤&#xff1a;我的AI编程初探试用感受&#xff1a;双刃剑下的深思…...

RustGUI学习(iced)之小部件(三):如何使用下拉列表pick_list?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第三篇,主要讲述下拉列表pick_list部件的使用,会…...

【OceanBase诊断调优】—— Unit 迁移问题的排查方法

适用版本&#xff1a;V2.1.x、V2.2.x、V3.1.x、V3.2.x 本文主要介绍 OceanBase 数据集在副本迁移过程中遇到的问题的排查方法。 适用版本 V2.1.x、V2.2.x、V3.1.x、V3.2.x 手动调度迁移问题的排查 OceanBase 数据库的 RootService 模块负责 Unit 迁移的调度&#xff0c;如果…...

[极客大挑战 2019]PHP

1.通过目录扫描找到它的备份文件&#xff0c;这里的备份文件是它的源码。 2.源码当中涉及到的关键点就是魔术函数以及序列化与反序列化。 我们提交的select参数会被进行反序列化&#xff0c;我们要构造符合输出flag条件的序列化数据。 但是&#xff0c;这里要注意的就是我们提…...

数据结构之跳跃表

跳跃表 跳跃表&#xff08;skiplist&#xff09;是一种随机化的数据&#xff0c; 由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出&#xff0c; 跳跃表以有序的方式在层次化的链表中保存元素&#xff0c; 效率和平衡树媲美 —— …...

搜维尔科技:动作捕捉解决方案:销售、服务、培训和支持

动作捕捉解决方案&#xff1a;销售、服务、培训和支持 搜维尔科技&#xff1a;动作捕捉解决方案&#xff1a;销售、服务、培训和支持l...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...