写在前面:
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
思路:
- 设置两个字符数组存储两个加数;
- 因为两个数相加是末位对齐,而用字符数组存的两个加数(下标对齐的话)是首位对齐,运算的时候鼓捣下标应该挺麻烦,所以两个数组各一遍循环把其中内容分别放到两个栈里,末位在栈顶;
- 设置一个表示进位的变量up,初值为1;
- ((两栈顶元素相加+up)%16)压入result栈中,up=(两栈顶元素相加+up)/16 —> 两个加数栈分别pop() …… 直到其中一栈为空。
- 再循环,把上轮循环中未空的栈中的元素(注意up值)压入result栈;
- 这样得到的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;
}