文章

16

粉丝

33

获赞

2

访问

3.1k

头像
十六进制不进位加法 题解:
P1702 厦门大学2017年机试题
发布于2024年3月13日 01:03
阅读数 250

欢迎访问我的博客,里面有对本题解的更精细排版,还有刷过xmu一些机试题目并给出了详细的分析和解题步骤描述。

博客链接

## 分析
#### 输入
本题解题关键在于输入的两个数位数不同时候需要尾数对齐,由于是16进制输入,含有字母,需要当作字符串输入,当然输出也要字母,那么就需要我们的两个老伙计了,一个是map,另一个是自己定义char和int互转的函数,map有点麻烦,我们这里还是用自定义函数。
#### 个位对齐
1. 将输入的char数组转换成string,从而能够很容易的求出数组的长度
2. 对比两个字符串的长度,取小的那个长度作为接下来循环相加所得子串target的长度
3. 循环相加时候每个字符数组都从各自length-1的位置开始取数
#### 循环相加
1. 经过个位对齐,取完字符后,将两数字符转成相应数字
2. 两个数字相加,所得之和对16取余
3. 取余结果转换成字符不断拼入一个字符串target中
4. 每次完成依次上述三个操作,就将当前位置为'\0',然后再赋给string以便下一轮while计算长度(这一步的目的是让字符串长度都减去1)
5. 重复上述4个操作,直到其中一个数组长度为0

#### 输出结果
1. 先找出上面两个字符数组中非空的一个输出(这个数组是正序的,且是高位,应该先输出)
2. 再倒序输出target串(这个串是低位,倒序,需要后输出)
## 代码来咯


#include <cstdio>
#include <map>
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;

int real_num(char num){
  if(num<='9'&&num>='0'){
    return num-'0';
  }else if(num<='f'&&num>='a'){
    return num-'a'+...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发