好久没有写文章了,主要是近期开学上网课再加上刷题的缘故,日常有些忙碌。

话不多说,接下来是正题:

一切问题都是有源头的,在这里我就直接先放题了。

接下来我以代码+部分代码的解释+注意事项进行

ps:(代码运行环境 vs2019,代码出现的_s属于vs2019上的安全书写)

代码如下:

#include<stdio.h>
#include<string.h>
char a[1010];
char b[1010];
int bf[1010];
int c[1010] = { 0 };
int main()
{int t,i,x,y,max,flag,p,ok;p = 0;scanf_s("%d", &t);while (t--){p++;flag = 0;memset(a, 0, sizeof a);memset(b, 0, sizeof b);memset(c, 0, sizeof c);memset(bf, 0, sizeof bf);scanf_s("%s", a, 1010);scanf_s("%s", b, 1010);x = strlen(a);y = strlen(b);max = x;if (x > y){flag = 1;max = x;int tmp = -1;for (i = 0; i < x; i++){if (i <= x - y - 1)bf[i] = 0;elsebf[i] = b[++tmp]-48;}}if(x<y){flag = 2;max = y;int tmp = -1;for (i = 0; i < y; i++){if (i <= y - x - 1)bf[i] = 0;elsebf[i] = a[++tmp]-48;}}if (flag == 0){for (i = max - 1; i >= 0; i--){if (c[i+2] >= 10){c[i + 1] += c[i + 2] / 10;c[i+2] = c[i+2] % 10;}c[i + 1] += a[i] + b[i] - 48 - 48;}}if (flag == 1){for (i = max - 1; i >= 0; i--){if (c[i + 2] >= 10){c[i + 1] += c[i + 2] / 10;c[i + 2] = c[i + 2] % 10;}c[i + 1] += a[i] + bf[i] - 48;}}if (flag == 2){for (i = max - 1; i >= 0; i--){if (c[i + 2] >= 10){c[i + 1] += c[i + 2] / 10;c[i + 2] = c[i + 2] % 10;}c[i + 1] += bf[i] + b[i] - 48;}}printf("Case %d:\n", p);for (i = 0; i < x; i++){printf("%d", a[i] - 48);}printf(" + ");for (i = 0; i < y; i++){printf("%d", b[i] - 48);}printf(" = ");for (i = 0; i <= max; i++){ok = 1;if (c[0] == 0){ok = 0;c[0] = 1;}if(ok==1)printf("%d", c[i]);}printf("\n");}
}

该题的核心————》高精度

因为题上的意思a,b两个数可以看做1000位的正整数,因此就算是unsigned long long也无法正常存储,所以我们需要用数组来接收数据,同时也需要借助数组来处理数据,最后用数组输出数据。

高精度加法,高精度——》数据大,加法——》还是普通的加法,不要被虎着。

核心处理——》加法and进位

加法,就是从个位开始加(小学加法列竖式 能更好地理解);

进位,就是满10进1;

注意:

1.

c[i + 1] += c[i + 2] / 10;

c[i + 2] = c[i + 2] % 10;

这两个顺序不要反,别人你的输出很有可能前面是10101010...这样,因为如果反写

c[i + 2] = c[i + 2] % 10;

c[i + 1] += c[i + 2] / 10;

第一次处理后,c[i + 1]的值就可能发生变化,与想的逻辑就存在偏差

2.

进位的时候为什么要i+1?(换句话来说,就是为什么接收处理数据的数组要开的比max大1?)

这个也很好理解,举个例子99 +11 = 110,可能数据处理最终结果的长度比max大1。看完这个例子,应该就明白+1这个小细节了。

3.

为什么代码中有补0模块?

举个例子1234 123,这个数据在数组中的位置如下:

0 1 2 3 4(坐标)

1 2 3 4

1 2 3

因为我们加法执行逻辑是从个位开始一次加(和进位)

为了让我们代码按数学逻辑正常执行,我们进行补0操作

结果如下:

0 1 2 3 4(坐标)

1 2 3 4

0 1 2 3

然后数据处理就不会有操作逻辑上的问题

通过这个例子就可以很好的理解为什么要补0

4.

进位要放在“加”数据处理的前面(也就是相同位上的数字相加这个模块的前面)

具体为什么,大家有兴趣可以试一下,对比对比。

在最后感谢大家的阅读,

欢迎大家点赞评论+关注,

该代码不是最优代码,也希望大家多评论交流,相互进步!

高精度加法(A+BProblemII)相关推荐

  1. 基础练习 高精度加法

    基础练习 高精度加法 时间限制:1.0s 内存限制:512.0MB 问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标 ...

  2. 用C++的类重载高精度加法,乘法和等于符号

    运行结果: 代码如下: #include<iostream> #include<algorithm> #include<string.h> #include< ...

  3. PAT甲级1024 Palindromic Number:[C++题解]回文串和高精度加法

    文章目录 题目分析 题目链接 题目分析 一个判断是否是回文数的函数:check,思路是使用双指针从两端分别往里走. 另一个是高精度加法函数add,传入两个vector. 另外,vector逆序构造可以 ...

  4. PAT甲级1023 Have Fun with Numbers:[C++题解]高精度加法和两个vector大小比较

    文章目录 题目分析 题目链接 题目分析 使用高精度加法高精度加法板子求 这个数的两倍,存在一个vector中. 所谓高精度就是使用string来存大的数,然后模拟列竖式加法,结果一位一位压入数组vec ...

  5. 高精度加法(C++实现)

    高精度加法 简介 用于计算含有超过一般变量存放不下的非负整数 高精度加法这个过程是模拟的小学竖式加法计算 步骤 以下有顺序之分 数组清零 输入 获取长度 逆置 字符型数字转成对应的整型数字 计算并输出 ...

  6. 《信息学奥赛一本通》 高精度加法。输入两个正整数,求它们的和。

    高精度加法.输入两个正整数,求它们的和. 算法分析 升级版代码 算法分析 输入两个数到两个变量中,然后用赋值语句求它们的和,输出.但是,我们知道,在C++语言中任何数据类型都有一定的表示范围.当两个被 ...

  7. 高精度加法(非负)和大数阶乘及和汽水问题

    高精度加法(非负)和大数阶乘 文章目录 高精度加法(非负)和大数阶乘 一.问题描述 二.代码 三.问题描述 四.代码 五.问题描述 六.代码 一.问题描述 二.代码 #define _CRT_SECU ...

  8. CCF NOI1138 高精度加法

    问题链接:CCF NOI1138 高精度加法. 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 给两个正整数,计算它们的和. 输入 两行,每行表示一个数(位数达10000位). ...

  9. 高精度加法 problem A+B

    题目描述 高精度加法,相当于 a+b problem,不用考虑负数. 输入格式 分两行输入.a,b <=10^500 输出格式 输出只有一行,代表 a+b 的值. 输入输出样例 输入 1001 ...

最新文章

  1. Alphabet股价周五跌5.32%:三年最大单日跌幅
  2. jQuery mobile 中div圆角弹出层
  3. MyBatis的运行的核心原理解析(三)
  4. Java 读文件的5种方式
  5. php mysql explain_Mysql分析-explain的详细介绍
  6. C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)
  7. html管道符需要转义么,为什么String.split需要管道分隔符进行转义?
  8. 多个kinect标定,颜色和深度的标定
  9. 记事本html表白,霸道总裁之代码强势表白
  10. aida64怎么测试cpu稳定性_怎么测试电脑CPU稳定性
  11. 普通高中信息技术课程标准( 必修 选修科目)
  12. windows云服务器,如何使用windows云服务器
  13. 微信开发公众号本地调试
  14. (2)马裤分:七分裤(长度为 70cm
  15. 微信小程序实现音乐播放器(2)
  16. MATLAB R2021a 绘图函数fplot 使用详解
  17. PyQt5 QThread
  18. 微信小程序——音乐播放器
  19. 全球与中国自洁式空气过滤器市场现状及未来发展趋势(2022)
  20. SLS机器学习介绍(01):时序统计建模

热门文章

  1. cesium-绘制点、线、面 - 基于Vue
  2. SpringMVC 日期类型转换
  3. JDK1.8源码下载及获取、导入IDEA阅读、配置JDK源码
  4. 数组(Array)的常用方法
  5. 【JAVA】关于向上转型与向下转型
  6. python怎么设计奥运五环_python 相关语法 图形绘制 奥运五环
  7. ubuntu安装可加速播放打视频播放器vlc
  8. docker 学习记录
  9. 年度总结 | 2020 Flink 学习路线总结
  10. python添加模块