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

[保研/考研机试] KY80 进制转换 北京大学复试上机题 C++实现

题目链接:

KY80 进制转换icon-default.png?t=N6B9https://www.nowcoder.com/share/jump/437195121691735660774

描述

写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串(注意可能存在的一个测试用例里的多组数据)。

输入描述:

输入一个十六进制的数值字符串。

输出描述:

输出该数值的十进制字符串。

示例1

输入:

0xA

输出:

10

思路:

  1. 读入十六进制数值字符串 s。

  2. 初始化结果字符串 res 为 "0",表示最终的十进制结果。

  3. 从字符串的第三位开始遍历,即从十六进制数值的有效部分开始,因为前两位为 "0x" 表示十六进制前缀。

  4. 在遍历过程中,先将结果字符串 res 乘以 16,相当于将十六进制数值左移 4 位。

  5. 再将当前字符代表的值加到结果字符串 res 中,通过调用 Add 函数实现。

  6. 输出最终的十进制结果。

源代码:

#include <iostream>
#include <string>
using namespace std;// 将十六进制字符转换为对应的整数
int CharToInt(char c) {if (c >= '0' && c <= '9') {return c - '0';  // 数字字符直接转换} else {return c - 'A' + 10;  // 字母字符转换,a 对应 10,b 对应 11,依此类推}
}// 将字符串表示的十六进制数与整数 x 相乘
string multiple(string str, int x) {int carry = 0;  // 进位string result;  // 存放结果for (int i = str.size() - 1; i >= 0; i--) {int current = x * CharToInt(str[i]) + carry; // 计算当前位的结果result = char(current % 10 + '0') + result;  // 将当前位的结果插入到结果的前面carry = current / 10;  // 更新进位}while (carry != 0) {result = char(carry % 10 + '0') + result;  // 处理剩余的进位carry /= 10;}return result;
}// 将字符串表示的十六进制数与整数 x 相加
string Add(string str, int x) {int carry = x;  // 初始进位为 xstring result;  // 存放结果for (int i = str.size() - 1; i >= 0; i--) {int current = CharToInt(str[i]) + carry; // 计算当前位的结果result = char(current % 10 + '0') + result;  // 将当前位的结果插入到结果的前面carry = current / 10;  // 更新进位}while (carry != 0) {result = char(carry % 10 + '0') + result;  // 处理剩余的进位carry /= 10;}return result;
}int main() {string s;while (cin >> s) {string res = "0";  // 初始化结果为0for (int i = 2; i < s.size(); i++) {res = multiple(res, 16);  // 乘以16,相当于左移4位res = Add(res, CharToInt(s[i]));  // 加上当前字符代表的值}cout << res << endl;  // 输出最终结果}return 0;
}

提交结果:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

http://www.lryc.cn/news/118746.html

相关文章:

  • AP2915DC-DC降压恒流驱动IC LED电源驱动芯片 汽车摩托电动车灯
  • Android 实现无预览拍照功能
  • 第一章-数据结构绪论
  • 20、stm32使用FMC驱动SDRAM(IS42S32800G-6BLI)
  • git仓库大文件导致仓库体积增大处理
  • 将游戏坐标转化成屏幕鼠标坐标
  • springboot中Instant时间传参及序列化
  • nacos安装与启动相关问题(启动闪退和显示此站点的连接不安全)
  • 51单片机学习--DS18B20温度读取温度报警器
  • PYTHON专栏
  • 从初学者到专家:Java运算符的完整指南
  • Linux:shell脚本:基础使用(3)
  • opencv基础46-图像金字塔02-拉普拉斯金字塔
  • 到 2030 年API 攻击预计将激增近 1000%
  • 环形队列+DMA空闲中断+接收串口数据
  • LeetCode 31题:下一个排列
  • CMake:检测python模块和包
  • 02Mysql之多表查询--例题讲解
  • 虹科方案 | 汽车总线协议转换解决方案
  • Mr. Cappuccino的第59杯咖啡——简单手写SpringIOC框架
  • 爬虫 学习HTML标签和元素的基本概念,了解网页的结构和内容
  • mysql将id重新修改为递增
  • http、https笔记
  • 飞凌嵌入式「国产」嵌入式核心板大盘点(三)——龙芯中科、赛昉科技
  • 以vue2为例,用npm开发环境在后端部署vue2项目(更推荐使用nginx部署)
  • docker容器监控:Cadvisor +Prometheus+Grafana的安装部署
  • 前端食堂技术周刊第 93 期:7 月登陆 Web 平台的新功能、Node.js 工具箱、Nuxt3 开发技巧、MF 重构方案
  • 获取 Android 的 SHA1 值
  • ! [remote rejected] develop -> develop (pre-receive hook declined)
  • 最强的表格组件—AG Grid使用以及License Key Crack