博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【高精度加法】
阅读量:5309 次
发布时间:2019-06-14

本文共 1090 字,大约阅读时间需要 3 分钟。

这一章主要来讲一下C++的高精度加法和乘法

众所周知,int和longlong能存下的数据是有限的,但是我们有些数据过大的时候,连最基本的加法也无法实现。那么就必然会出现高精度的加法。但是怎么用代码实现呢?我们用竖式加减来尝试一下。
在这里插入图片描述
很明显,我们是从低位往高位依次累加,那么可以得到下面一个算式:
在这里插入图片描述
但是很明显,我们在计算中还会遇到进位。所以我们在算出每一位所对应的数值之后,还要依次从低位到高位考虑进位。最后进行输出即可。
但是我们在代码实现中还是会遇到一些问题,接下来依次带着大家来完成代码部分。
首先,因为两个加数可能位数特别巨大,所以我们用a,b数组分别表示两个加数,c数组表示答案。
int a[10010],b[10010],c[20020];
因为不能直接读取数组,所以用字符串来读入,读入之后反向打入数组中:

string aa,bb;cin>>aa>>bb;for(int i=0;i<=aa.size()-1;i++){	a[i]=aa[aa.size()-i-1]-'0';}for(int i=0;i<=bb.size()-1;i++){	b[i]=bb[bb.size()-i-1]-'0';}

反向读入的原因是后面方便计算!

然后实现加法部分。
由竖式可得,c[i]=a[i]+b[i];
那么就可以写出:(后面一段是进位操作)

for(int i=0;i

最后输出:

if(c[max(aa.size(),bb.size())])cout<
=0;i--){ cout<

这样就完成了整个高精度加法过程,完整代码如下:

#include
using namespace std;string aa,bb;int a[10010],b[10010],c[20020];void add(){ memset(c,0,sizeof(c)); for(int i=0;i
=0;i--) { cout<
>aa>>bb; for(int i=0;i<=aa.size()-1;i++) { a[i]=aa[aa.size()-i-1]-'0'; } for(int i=0;i<=bb.size()-1;i++) { b[i]=bb[bb.size()-i-1]-'0'; } add(); return 0;}

ov.

转载于:https://www.cnblogs.com/moyujiang/p/11167771.html

你可能感兴趣的文章
读《我是一只IT小小鸟》有感
查看>>
linux中系统管理指令
查看>>
JS常用各种正则表达式
查看>>
Java 定时任务
查看>>
二分查找的平均查找长度详解【转】
查看>>
读阿里巴巴Java开发手册v1.2.0之编程规约有感【架构篇】
查看>>
基于page的简单页面推送技术
查看>>
js 日期格式化函数(可自定义)
查看>>
git报错:failed to push some refs to 'git@github.com:JiangXiaoLiang1988/CustomerHandl
查看>>
Eureka高可用,节点均出现在unavailable-replicas下
查看>>
day 21 - 1 包,异常处理
查看>>
机器学习等知识--- map/reduce, python 读json数据。。。
查看>>
字符串编码
查看>>
预编译语句(Prepared Statements)介绍,以MySQL为例
查看>>
内联汇编实现 memcpy 和 memset
查看>>
css学习笔记
查看>>
关键字--union
查看>>
iOS开发者账号详细介绍
查看>>
Shell入门
查看>>
运算符与格式输出输入4
查看>>