EOJ 3037 十六进制加法

博客介绍了如何解决EOJ 3037问题,即实现两个十六进制整数的加法。通过将数字存储在栈中并进行末位对齐的加法操作,利用进位变量来处理进位情况。文章提到了在实现过程中遇到的循环结束条件错误和进位操作问题,并表示会后续修复。
摘要由CSDN通过智能技术生成

写在前面:

hhhhh我又回来了,发现一个学期都没写博客了嗷【捂脸

现在回想起来其实还是有很多可写的内容的,比如计网实验、操作系统改pintos、Linux课后作业……还有这个寒假去杭州参加的Google InnoCamp!(吹爆!)

害,值得写的东西固然有很多,但不写只有一个理由:
不过,慵懒如我还是抵不住被困在家的闲,最近打算更新一波~ 大部分应该是记录最近做到的还不错的OJ题。如果写嗨了可能会写点别的也说不定。

题目:

单点时限: 2.0 sec

内存限制: 256 MB

请编写程序实现两个十六进制整数的加法。

例如:十六进制整数 3762 和 05C3,3762+05C3=3D25

十六进制整数 CB9 和 957,CB9+957=1610

在这里插入图片描述

输入格式
第 1 行:一个整数 T (1≤T≤10) 为问题数。

接下来 T 行,每行输入两个十六进制整数 n 和 m (n,m 为不超过 200 位的十六进制整数),A~F 全部为大写字母。 两个整数之间用一个空格分隔。

输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。然后对应每个问题在一行中输出两个十六进制整数相加的结果,字母全部用大写字母。

样例
Input
3
3762 05C3
CB9 957
F 1
Output
case #0:
3D25
case #1:
1610
case #2:
10

思路:

  1. 设置两个字符数组存储两个加数;
  2. 因为两个数相加是末位对齐,而用字符数组存的两个加数(下标对齐的话)是首位对齐,运算的时候鼓捣下标应该挺麻烦,所以两个数组各一遍循环把其中内容分别放到两个栈里,末位在栈顶;
  3. 设置一个表示进位的变量up,初值为1;
  4. ((两栈顶元素相加+up)%16)压入result栈中,up=(两栈顶元素相加+up)/16 —> 两个加数栈分别pop() …… 直到其中一栈为空。
  5. 再循环,把上轮循环中未空的栈中的元素(注意up值)压入result栈;
  6. 这样得到的result栈就是运算结果了(栈顶为结果首位,栈底为结果末位)。输出即可。

代码:

#include <bits/stdc++.h>
using namespace std;

int char_to_int(char c){
   
    if(c>='0'&&c<='9') return c-'0';
    else return c-'A'+10;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值