1001 A+B
首先要说的是这道题的难点是如何把数字输出加入逗号,毕竟数据范围并没有超过Long。当然这个难点也不是问题,将数字转为字符串,C中就有这样的函数,然后再用 %3==0
这样来控制输出 。
但我最近出于想要建立自己的代码库的想法,而且这道题我的第一反应其实是高精度运算,所以一是想练练手,二是以后想用高精度可以直接复制了,我就写的复杂一点。
解题思路
程序的实现需要四个函数。
函数一: char* highAdd(char* a,char* b,char *c)
//c=a+b
原谅我蹩脚的英语,这个词我的本意是无负数的高精度加法,将数字以字符串读入(负号另处理,不传入),然后逐位相加,可以理解小学的竖式加法。将结果存在c中,因为不确定位数,所以需要除去0位,返回非零位的指针。比如三位数加一位数答案有可能是四位和三位(999+1和100+1),所以我预设的是四位,最后再除零。
函数二: char* highDel(char* a,char* b,char *c)
//c=a-b
这个函数用在存在负号的情况,其中a的值必大于b的值,否则会出错,实现过程同 highAdd
,竖式计算。
函数三: int compare(char* a,char* b)
这个compare就是为了上面的 highDel
服务的,判断a和b的值谁大,当然不能处理有负号的情况。负号的处理我放在了主函数中。
函数四: void formatPrint(char* a)
这个函数就是将最后的结果进行规范输出,因为是对字符串进行操作,实现比较简单,就不细讲了。
主函数
主函数中读取两个数,依据负号分为三种情况依次处理。
- 没有负号
直接两数相加,规范输出
- 都有负号
将两数的非负号位进行相加,最后输出前加个 -
就行了。
- 一个负号
分两种情况,正数大于负数的绝对值的话可以直接调用highDel,然后输出。正数小于负数的绝对值的话将负数的绝对值减去正数,然后在输出结果前加个负号就可以了。
过程
思路有了话,过程也就没什么可说的的,就是照着自己的设想实现,只要保证函数的功能能够实现,那么程序的主体就可以工作,要非要说什么调试的经历的话,实现逗号的输出算一个,虽然知道要用 %3
来实现逗号输出的控制,但用什么来求余就需要控制,是加1还是加2还是不用加,我是逐个试过去,然后还要注意头和尾不能输出逗号,需要再添加一个条件来控制。
其次要说的就是加法函数了,本来我是没打算输出的,我想将c的指针后移来除零,但发现没用,后来想了想,指针指向的内容在函数内可以改变,但指针本身并不可以改变,所以我就返回一个指针来指向第一个非零位,对了,还有答案为0的话还要将0保留,需要添加条件判断,不能直接跳过。
提交列表
简单测试通过后直接AC了
最后
写完后回看自己的代码总觉的实现的不是很好,感觉有些不必要的操作,比如对负号的处理好像有点复杂,和我想象中的高精度运算有点差距。但我目前也没什么更好的想法,就先这样吧。
1001 A+B的更多相关文章
- SCNU 2015ACM新生赛初赛【1001~1011】个人解题思路
题目1001: 大意:已知$n$个角色,$m$种怪物种族,$k$个怪物,给出一组角色编号,编号$P_{i}$的角色能肝死编号$i$的怪物,对于给定的一组怪物编号,为了打通关 ...
- BZOJ 1001: [BeiJing2006]狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 20029 Solved: 4957[Submit][ ...
- 1001 数组中和等于K的数对 1090 3个数和为0
二分查找.对数组每个V[i],在其中查找K-V[i],查找完成后修改v[i]避免重复输出 #include<iostream> #include<algorithm> #inc ...
- PAT Basic Level 1001
大纲考察内容 数据存储结构:数组.链 基础算法:递归.排序.计算时间复杂度.空间复杂度.分析算法稳定性 1001.害死人不偿命的(3n+1)猜想 (15) https://www.patest.cn/ ...
- acm入门 杭电1001题 有关溢出的考虑
最近在尝试做acm试题,刚刚是1001题就把我困住了,这是题目: Problem Description In this problem, your task is to calculate SUM( ...
- 1001. A+B Format (20)
原题连接:https://www.patest.cn/contests/pat-a-practise/1001 题目如下: Calculate a + b and output the sum in ...
- ORA-00600: internal error code, arguments: [17281], [1001], [0x1FF863EE8], [], [], [], [], []
我们生产服务器中的一个数据库发出监控告警日志的邮件,内容如下所示,在31号09:11分出现了大名鼎鼎的ORA-00600错误. Dear All: The Instance xxx' alert lo ...
- 山东第一届省赛1001 Phone Number(字典树)
Phone Number Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 We know that if a phone numb ...
- 【第1期】腾讯云的1001种玩法征集,Ipad mini和Kindle 等你拿!(文章评审中)
版权声明:本文由阁主的小跟班原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/695994001482226944 来源:腾云 ...
- HOJ 1001: A+B; 1002: A+B+C
两道水题,用来熟悉 HOJ 的提交系统. 1001:输入两个整数 A, B (0 <= A,B <= 10),输出 A+B. #include <iostream> using ...
随机推荐
- ThinkPhp5学习之新手博客
前端框架来源网络,后端框架采用 ThinkPhp 5 开发 参考资料:哔哩哔哩 ThinkPHP5.1新手博客项目实战 项目地址:https://github.com/yjy1/tp5
- Linux基础命令之文件过滤及内容编辑处理(二)
. wc 用于统计文件的行数,单词,或字节数 -l # 统计行数 -L # 打印最长行的长度,一般脚本中判断字符长度 -c # 统计字节数 -w # 统计单词数 -m 统计字符数 . iconv 转换 ...
- 在CentOS7.6上安装自动化运维工具Ansible以及playbook案例实操
前言 Ansible是一款优秀的自动化IT运维工具,具有远程安装.远程部署应用.远程管理能力,支持Windows.Linux.Unix.macOS和大型机等多种操作系统. 下面就以CentOS 7.6 ...
- 检测ip和地区
获取当前位置所在省份城市和所用网络IP <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...
- CQRS简单入门(Golang)
一.简单入门之入门 CQRS/ES和领域驱动设计更搭,故整体分层沿用经典的DDD四层.其实要实现的功能概要很简单,如下图. 基础框架选择了https://github.com/looplab/even ...
- Scala(四):对象
对象:Object 1.单例对象 2.伴生对象 3.扩展类或特质的对象 4.apply方法 5.应用程序对象 6.枚举1.单例对象 Scala中没有你静态方法或静态字段,可以用object这个语法结构 ...
- redis基本使用
一 简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted ...
- Android Studio 重命名文件
选中文件,Refactor——Rename AS提供了两种方式重命名,Rename 和 Rename File,暂时还不清楚区别.有知道的麻烦告知下.
- 使用VMWareWorkstation10搭建学习环境笔记
第一节:介绍虚拟化技术 虚拟化技术1.在一台计算机运行多个操作系统2.教学环境 测试环境3.和硬件无关4.P to V 物理机->虚拟机(Physical to Virtual) V ...
- VBA_话费明细单_格式调整
VBA-联通话费明细单-格式调整 Sub ChangeColumn() Rows(1).RowHeight = 24 '设置第1行的行高 Rows(1).WrapText = True '设置第1行的 ...