EOJ 3037 十六进制加法
请编写程序实现两个十六进制整数的加法。
例如:十六进制整数 3762 和 05C3,3762+05C3 =3D25
十六进制整数 CB9 和 957,CB9+957=1610

Input
第 1 行:一个整数 T (1≤T≤10) 为问题数。
接下来 T 行,每行输入两个十六进制整数 n 和 m (n,m 为不超过 200 位的十六进制整数),A~F 全部为大写字母。 两个整数之间用一个空格分隔。
Output
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。然后对应每个问题在一行中输出两个十六进制整数相加的结果,字母全部用大写字母。
#include <stdio.h>
#include <stdlib.h>
int init(char *a)
{
char c;
int pos=;
while((c=getchar())!=' '&&c!='\n')
a[pos++]=c;
a[pos]=;
return pos-;
}//返回值是为了确定两个数组的长度
int ctoi(char c) {return (c>=''&&c<='')?c-'':c-'A'+;}
char itoc(int i) {return i<=?i+'':i-+'A';}
void add(char* to,char* from,int t,int f)
{
int carry;char plus='';
for(;from[f]!=;f--,t--)
{
carry=ctoi(to[t])+ctoi(from[f])+ctoi(plus); 将两位转化成整数后相加
to[t]=itoc(carry%);
plus=itoc(carry/);//进位
}
while(t>=&&(carry=ctoi(to[t])+ctoi(plus))>)//不停进位的情况
{
to[t]=itoc(carry%);
plus=itoc(carry/);
t--;
}
if(plus>'')
to[]=plus;//留下一位空格以放置最后的进位
}
void print(char *s)
{
char *p=s;
if(p[]==) p++;//遗留的空位可能没有被使用
printf("%s\n",p);
}
int main()
{
int cas;scanf("%d",&cas);getchar();
for(int m=;m<cas;m++)
{
char a[],b[];
int pa,pb;
a[]=b[]=;//留下一位空格以放置最后的进位
pa=init(a);
pb=init(b);
printf("case #%d:\n",m);
if(pa>=pb)//哪个长就把结果放置在哪个里
{
add(a,b,pa,pb);
print(a);
}
else
{
add(b,a,pb,pa);
print(b);
}
}
return ;
}
类似于大整数,还是有固定的模板的。
EOJ 3037 十六进制加法的更多相关文章
- C/C++编程笔记:C语言进制详解,二进制、八进制和十六进制!
我们平时使用的数字都是由 0~9 共十个数字组成的,例如 1.9.10.297.952 等,一个数字最多能表示九,如果要表示十.十一.二十九.一百等,就需要多个数字组合起来. 例如表示 5+8 的结果 ...
- 20165221 《网络对抗技术》EXP1 PC平台逆向破解
20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...
- 20191310Lee_yellow缓冲区溢出实验
缓冲区溢出实验 1.什么是缓冲区溢出 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据 ...
- php 实现二进制加法运算
php实现二进制加法: 思路:没有工作中应用过此场景,但十进制的加法还是经常做的,能不能用十进制加法变相实现呢? 答案是可以的,并且php也提供进制间转换的函数,我的实现使用了 bindec():二进 ...
- js中的一元加法和一元减法
大多数人都熟悉一元加法和一元减法,它们在 ECMAScript 中的用法与您高中数学中学到的用法相同. 一元加法本质上对数字无任何影响: var iNum = 20; iNum = +iNum; al ...
- [javaSE] 进制转换(二进制十进制十六进制八进制)
十进制转二进制,除2运算 十进制6转二进制是 110 (注意从右往左写,使用算式从下往上写) 二进制转十进制,乘2过程 二进制110转十进制 0*2的0次方+1*2的1次方+1*2的2次方=6 对 ...
- 我的Java开发学习之旅------>二进制、八进制、十进制、十六进制之间转换
一. 十进制与二进制之间的转换 (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权 ...
- iOS 4s-6Plus屏幕自动适配及颜色转换为十六进制
iOS各种屏幕自动适配及颜色转换为十六进制 ★★★XLJMatchScreen自动适配屏幕★★★ 支持pod导入 pod 'XLJScreenMatching', '~> 1.0.3' 如果发现 ...
- 用CIL写程序:写个函数做加法
前言: 上一篇文章小匹夫为CIL正名的篇幅比较多,反而忽略了写那篇文章初衷--即通过写CIL代码来熟悉它,了解它.那么既然有上一篇文章做基础(炮灰),想必各位对CIL的存在也就释然了,兴许也燃起了一点 ...
随机推荐
- matplotlib之pyplot 学习示例
现在通过numpy和matplotlib.pyplot 在Python上实现科学计算和绘图,而且和matlab极为相像(效率差点,关键是方便简单) 这里有大量plots代码例子. 1. 简单的绘图( ...
- Ubuntu中在终端进入root权限但是总提示密码错误的解决方案
先解除root锁定,为root用户重新设置密码 打开终端输入:sudo passwd(注意是passwd不是password) Password: <--- 输入你当前用户的密码 Enter n ...
- Python批量添加库搜索路径
被win10 给坑了,换回Win7. 重装系统后,继续使用Python,Eclipse不用重装,pydev不用重装,只需重装Python2.7.6 X64 for win即可.然后,默认已安装的Pyt ...
- Ad hoc polymorphism
与面向对象中的接口类或抽象类中定义的函数组类似: 函数的具体执行依赖与函数医用的类型. In programming languages, ad-hoc polymorphism[1] is a ki ...
- 题解 P2605 【[ZJOI2010]基站选址】(From luoguBlog)
线段树优化dp 数组f[i][j]表示在前i个村庄内,第j个基站建在i处的最小费用 根据交线牛逼法和王鹤松式可得方程 f[i][j]=min(f[k][j−1]+cost(k,i)) cost(k,i ...
- PAT_A1113#Integer Set Partition
Source: PAT A1113 Integer Set Partition (25 分) Description: Given a set of N (>) positive integer ...
- Python字典 day2
一.字典 1.字典的特点: 一系列键-值对(key-value),字典用放在花括号{ }中的一系列键值对表示; 字典中有多个元素时需要用逗号,隔开: key不能重复: 字典是无序的. 字典的优点:字典 ...
- Python画三维图-----插值平滑数据
一.二维的插值方法: 原始数据(x,y) 先对横坐标x进行扩充数据量,采用linspace.[如下面例子,由7个值扩充到300个] 采用scipy.interpolate中的spline来对纵坐标数据 ...
- Ubuntu的shell执行过程
登录shell(login shell)会执行.bash_profile,.bash_profile中会执行.profile,.profile中会执行.bashrc 非登录shell(non-logi ...
- java获取当前日期的前一天,前一月和前一年
核心:使用Calendar的add(int field, int amount)方法 Calendar ca = Calendar.getInstance();//得到一个Calendar的实例 ca ...