一、思路:

1.字符数组读入,整形数组存储,字符数组输出

2.类似于十进制大数加法,用整型数组模拟运算;总使得长度长的字符串作为s1,这涉及到字符数组交换

3.每次结束时清空整型数组

二、注意点:

1.读取时采用:

scanf("%s%s",s1+1,s2+1);

获取字符串长度采用:

len1=strlen(s1+1);
len2=strlen(s2+1);

交换字符串采用:

char temp[205];
strcpy(temp+1,s1+1);
strcpy(s1+1,s2+1);
strcpy(s2+1,temp+1);

这里所有的字符数组都是从第1位而非第0位开始存储

2.模拟加法过程中,使尾部对齐,向前运算;注意j的大小,否则会造成数组越界;最后通过判断a[0]是否大于0来考虑是否增长len1,整体后移:

void getAnswer(int a[], int b[])
{for(int i=len1, j=len2;i>=1;--i,--j){a[i]+=(j>=1)?b[j]:0;//notice here whether j>=1, or it will cause array crossoverif(a[i]>=16){a[i-1]+=1;a[i]%=16;}}if(a[0]){len1++;for(int i=len1;i>=1;--i)a[i]=a[i-1];}
}

三、代码:

#include <bits/stdc++.h>
using namespace std;
//hexadecimal additionchar s1[205], s2[205];
int a[205], b[205];
int T, cnt, len1, len2;int char2int(char ch)
{if(ch>='0'&&ch<='9') return ch-'0';else return ch-'A'+10;
}char int2char(int x)
{if(x<10) return x+'0';else return x-10+'A';
}void getAnswer(int a[], int b[])
{for(int i=len1, j=len2;i>=1;--i,--j){a[i]+=(j>=1)?b[j]:0;//notice here whether j>=1, or it will cause array crossoverif(a[i]>=16){a[i-1]+=1;a[i]%=16;}}if(a[0]){len1++;for(int i=len1;i>=1;--i)a[i]=a[i-1];}
}
int main()
{cin>>T;while(T--){scanf("%s%s",s1+1,s2+1);if(strlen(s1+1)<strlen(s2+1)){//if len1<len2, swap s1 and s2char temp[205];strcpy(temp+1,s1+1);strcpy(s1+1,s2+1);strcpy(s2+1,temp+1);}len1=strlen(s1+1);len2=strlen(s2+1);//use int array to store datafor(int i=1;i<=len1;++i)a[i]=char2int(s1[i]);for(int i=1;i<=len2;++i)b[i]=char2int(s2[i]);getAnswer(a,b);printf("case #%d:\n",cnt++);for(int i=1;i<=len1;++i)cout<<int2char(a[i]);cout<<endl;memset(a,0,sizeof(a));memset(b,0,sizeof(b));}return 0;
}

转载于:https://www.cnblogs.com/ChenyangXu/p/10466508.html

EOJ 3037:十六进制加法(高精度+数组位运算)相关推荐

  1. 树状数组 + 位运算 LA 4013 A Sequence of Numbers

    题目传送门 题意:n个数,两种操作,一是每个数字加x,二是查询& (1 << T) == 1 的个数 分析:因为累加是永远的,所以可以离线处理.树状数组点是c[16][M] 表示数 ...

  2. java用位运算实现加减乘除

    个人主页:熬夜磕代码丶 作品专栏: java se 我变秃了,也变强了 给大家介绍一款程序员必备刷题平台--牛客网 点击注册一起刷题收获大厂offer吧 文章目录 前言 一.常见位运算 1. & ...

  3. 计算机中逻辑运算顺序,【计算机系统】位运算与逻辑运算

    计算机系统的位运算与逻辑运算 一.位 1.定义 二进制数字系统中数据存储的最小单位,即每个二进制数0或1就称为位.位也叫比特(bit),8个bit组成一个字节(byte),每个字节表示程序中的某些文本 ...

  4. C语言位运算实现加法

    新建一个单文档工程: 在视类CPP文件头部添加函数声明: 函数体可以加到视类CPP文件尾部: int Add(int a,int b) { int jw=a&b; int jg=a^b; wh ...

  5. LeetCode:位运算实现加法

    LeetCode:位运算实现加法 写在前面 位运算符 实现加法的思路 两个加数,比如5(101)和6(110),如何不用加法就能得出两者之和呢? 我们知道二进制计算中,如果使用异或将会产生无进位的两者 ...

  6. 位运算-查找数组中唯一成对的数

    基础实例一:使用位运算判断数的奇偶性 实例代码: public class Test {public static void main(String[] args) {System.out.print ...

  7. [剑指offer]面试题第[56-2]题[JAVA][数组中数字出现的次数][状态机][hashmap][位运算]

    [问题描述][中等] 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字.示例 1:输入:nums = [3,4,3,3] 输出:4 示例 2:输入:n ...

  8. Python 数据分析三剑客之 NumPy(三):数组的迭代与位运算

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  9. LeetCode 2032. 至少在两个数组中出现的值(哈希/位运算)

    文章目录 1. 题目 2. 解题 2.1 哈希查找 2.2 位运算 1. 题目 给你三个整数数组 nums1.nums2 和 nums3 ,请你构造并返回一个 不同 数组,且由 至少 在 两个 数组中 ...

最新文章

  1. Reject: HTTP ‘DELETE‘ is not allowed, Not injecting HSTS.....DELETE请求PUT请求跨域问题
  2. mysql8.0.12密码_mysql8.0.12如何重置root密码
  3. 使用maven导入jar包
  4. mysql数据库表类型设置_mysql数据库表的类型介绍
  5. 【Linux系统编程应用】 V4L2编程基础(一)
  6. 交换算法经常使用的两个数的值
  7. mysql timestampt 输入字符串的格式不正确._mysql中取出的时间格式不正确
  8. oracle中悲观锁定_如何使用悲观锁定修复乐观锁定竞争条件
  9. 均分纸牌(洛谷-P1031)
  10. excel导入到mysql
  11. linux vi 块操作、多窗口
  12. 2021日喀则市江孜高考成绩查询,2021西藏高考成绩查询时间 西藏高考成绩查询入口...
  13. QCC3024/QCC3020/QCC3034 对讲机(Intercom) 蓝牙耳机 替代CSR8670
  14. 入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
  15. QQ红包金额分配算法
  16. umount卸载磁盘提示target is busy. (目标忙) 的问题解决方案
  17. 小米怎么解锁,有什么相关教程
  18. ElasticSearch 使用教程之_score(评分)介绍
  19. 输出2+22+222+2222类型问题(笔记)
  20. python中什么是异常_一文教你读懂 Python 中的异常信息

热门文章

  1. MAVROS started. MY ID 1.240, TARGET ID 1.1
  2. 跑步app保活_android APP保活机制
  3. Java中的dozer对象转换
  4. 爬虫数据存储到数据库/增量爬虫+多级页面获取=====安居客信息爬取
  5. duilib 动态多语言支持
  6. 郑州大学计算机系王院长,我院成功承办河南省第十二届ACM大学生程序设计竞赛...
  7. 批量删除的三种实现方式
  8. java毕业设计软件源代码]springMVC+mysql实现进销存系统仓库管理系统
  9. Python爬虫入门教程 35-100 知乎网全站用户爬虫 scrapy
  10. 强化学习丨有限马尔可夫决策过程学习总结