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

院校机试刷题第四天:1911反转公约数、1702十六进制不进位加法

一、1911反转公约数

1.题目描述

2.解题思路

两个关键点:1.如何把数字反转,2.如何求最大公约数。

反转:用字符串形式存储,定义一个新的字符串倒序存储反转之后的字符串,将字符串按位转换位数字。

求最大公约数:欧几里得算法:

  1. 给定两个整数 a 和 b,其中 a≥b。

  2. 计算 amodb,得到余数 r。

  3. 将 a 替换为 b,将 b 替换为 r。

  4. 重复步骤2和3,直到 b 为0。

  5. 此时的 a 就是最大公约数。

int gcd(int a, int b) {while (b != 0) {int r = a % b;a = b;b = r;}return a;
}

3.代码

#include <iostream>
#include <algorithm>
using namespace std;int strToNum(string str) {int num = 0;int length = str.length();int cnt = 1;for(int i = length - 1; i >= 0; i--) {num += (str[i] - '0') * cnt;cnt *= 10;}return num;
}int gcd(int a, int b) {while(b != 0) {int r = a % b;a = b;b = r;}return a;
}int main() {string str1, str2;cin >> str1 >> str2;//反转字符串reverse(str1.begin(), str1.end());reverse(str2.begin(), str2.end());//转为数字int num1 = strToNum(str1);int num2 = strToNum(str2);//求最大公约数if(num1 < num2) {swap(num1, num2);}int result = gcd(num1, num2);cout << result;return 0;
}

二、1702十六进制不进位加法

1.题目描述

2.解题思路

解题关键:1.如何实现十六进制加法,2.如何实现不进位

想要实现不进位的十六进制加法只能一位一位算,不能先转为十进制计算,再转回十六进制

不进位的话结果的长度就是最长的那个计算数的长度,从较小的计算数开始逐位相加,遇到需要进位的结果就将其减去16,再将大于9的数字转为字母存放起来。

因为是逐位计算,所以用字符串存储数字显然要更加方便。

3.代码

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;//字母输入统一为大写
string tongYi(string str) {for(int i = 0; i < str.length(); i++) {if(str[i] >= 'a' && str[i] <= 'z') {str[i] -= 32;}}return str;
}int main() {string str1, str2;while(cin >> str1 >> str2) {//统一输入为大写str1 = tongYi(str1);str2 = tongYi(str2);int length = max(str1.length(), str2.length());str1 = string(length - str1.length(), '0') + str1;str2 = string(length - str2.length(), '0') + str2;string str3(length, 0);for(int i = length - 1; i >= 0; i--) {int temp1 = (str1[i] >= 'A') ? (str1[i] - 'A' + 10) : (str1[i] - '0');int temp2 = (str2[i] >= 'A') ? (str2[i] - 'A' + 10) : (str2[i] - '0');int tempResult = temp1 + temp2;//去除进位if(tempResult >= 16) {tempResult -= 16;}if(tempResult >= 10) {str3[i] = tempResult - 10 + 'A';}else {str3[i] = tempResult + '0';}}//输出for(int i = 0; i < str3.length(); i++) {cout << str3[i];}cout << endl;}return 0;
}
http://www.xdnf.cn/news/6714.html

相关文章:

  • PR-2021
  • ADC深入——SNR、SFDR、ENOB等概念
  • 深入浅出拆分学习,图神经网络拆分学习,混合联邦学习
  • 网络攻防模拟:城市安全 “数字预演”
  • 14 C 语言浮点类型详解:类型精度、表示形式、字面量后缀、格式化输出、容差判断、存储机制
  • AlphaEvolve:基于Gemini的算法发现与优化综合报告
  • AI在线写作平台:AnKo引领未来创作新潮流!
  • 分析主流编程语言中哪些为支持面向对象的语言
  • 什么是实景VR?实景VR应用场景
  • 如何早期识别帕金森病?
  • 《图解 TCP/IP》笔记
  • 安科瑞DJSF1352-D直流电能表:破解充电桩计量难题
  • linux安装宝塔面板到数据盘
  • python Excel操作,将一个工作表中的sheet页复制到另一个工作表中(包括单元格的内容、样式、格式等)
  • 电动汽车直流快充充电桩AEV200-DC240M4的详细介绍
  • 防篡改小工具监测被该文件
  • 【GAN网络入门系列】一,手写字MINST图片生成
  • 实战解析MCP-使用本地的Qwen-2.5模型-AI协议的未来?
  • 录音证据想得到法院的采纳,应注意哪几点?
  • 存储器上如何存储1和0
  • Python 实验 1
  • 为什么Flexray在渐渐被TSN以太网替代-AI的回答
  • 若依框架的Excel导出功能
  • 03、基础入门-SpringBoot的大时代背景
  • spring MVC 至 springboot的发展流程,配置文件变化
  • SAP BC 刚初始化 没有数据 SE38 执行 SAPBC_DATA_GENERATOR
  • Google I/O 2025 观看攻略一键收藏,开启技术探索之旅!
  • powershell脚本定期清理旧的备份文件,定期转移备份文件
  • AI日报 - 2024年5月16日
  • Linux操作系统--进程间通信(system V共享内存)