基础算法 —— 高精度计算 —— 高精度加法
【算法分析】
输入两个数到两个变量中,然后用赋值语句求他们的和,输出。
但是,我们知道,在C++中任何数据类型都有一定表示范围。当两个被加数很大时,上述算法显然不能求出精确解,因此寻求另外一种方法。
在读小学时,我们做加法都采用竖式方法,这样,我们可以写出两个整数相加的算法。
我们用数组a、b分别存储加数和被加数,用数组c存储结果。则上例有a[3]=8,a[2]=5,a[1]=6;b[3]=2,b[2]=5,b[1]=5;c[4]=1,c[3]=1,b[2]=1,b[1]=1。两数相加如图所示。
因此,算法描述如下。
/*a、b、c均为数组,存储被加数、加数、结果*/
int c[100];
void add(int a[],int b[])
{int i=1,x=0;//x为进位while( (i<=a数组长度) || (i<=b数组长度) ){c[i]=a[i]+b[i]+x;//第i位相加并加上次的进位x=c[i]/10;//向高位进位c[i]%=10;//存储第i位的值i++;//位置下标}
}
【模版】
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{string str1,str2;int a[100],b[100],c[100];int len1,len2;int i;cin>>str1;cin>>str2;len1=str1.length();len2=str2.length();/*补0工作,保证两个字符串相同*/if(len1<len2)for(i=1;i<=len2-len1;i++)str1="0"+str1;elsefor(i=1;i<=len1-len2;i++)str2="0"+str2;len1=str1.length();len2=str2.length();for(i=0;i<=len1-1;i++)//加数str1存入数组aa[len1-i]=str1[i]-'0';for(i=0;i<=len2-1;i++)//加数str2存入数组bb[len2-i]=str2[i]-'0';int x=0;int lenc=1;while( (lenc<=len1) || (lenc<=len2) ){c[lenc]=a[lenc]+b[lenc]+x;//第i位相加并加上次的进位x=c[lenc]/10;//向高位进位c[lenc]%=10;//存储第i位的值lenc++;//位置下标}/*处理最高进位*/c[lenc]=x;if(c[lenc]==0)lenc--;for(i=lenc;i>0;i--)//倒序输出cout<<c[i];cout<<endl;return 0;
}
基础算法 —— 高精度计算 —— 高精度加法相关推荐
- 基础算法 —— 高精度计算 —— 高精度除法
[高精除以低精] 1.算法分析 做除法时,每一次的商的值都在0~9,每次求得的余数连接以后的若干位得到新的被除数,继续做除法.因此在做高精度除法时,要涉及到乘法运算和减法运算以及移位处理. 为程序简洁 ...
- 基础算法 —— 高精度计算 —— 高精度乘法
[算法分析] 类似加法,用竖式求乘法.在做乘法运算时,同样有进位,同时对每一位进行乘法运算时,必须进行错位相加. 分析c数组下标变化规律,可以写出如下关系式:Ci=C'i+C''i+... 由此可见, ...
- 基础算法 —— 高精度计算 —— 高精度减法
[算法分析] 类似加法,可以用竖式求减法.在做减法运算时,需要注意的是:被减数必须比减数大,同时需要处理错位以及前导0. [模版] #include<iostream> #include& ...
- 基础算法模板——高精度运算
基础算法模板--高精度运算 1. 高精度加法 vector<int> add(vector<int> &A, vector<int> &B) {if ...
- 基础算法 —— 高精度计算
[概述] 利用计算机进行数值计算,有时会遇到这样的问题:有些计算要求精度高,希望计算的尾数可达到几十甚至几百位,虽然计算机本身精度足够高,但受硬件限制,往往达不到实际问题所要求的精度,因此我们用程序设 ...
- 高精度计算--高精度加法详解
文章目录 前言 一.高精度加法分析 1.1 数学的竖式加法计算 1.2 数组模拟竖式计算 1.3 计算步骤分析 二.使用步骤 2.1 代码结构 2.2 读入数据并倒置:readDataAndRever ...
- 基础算法 —— 高精度计算 —— Java 大数类
[概述] 在 C++ 中数据类型的长度最多能到 64 位,一旦超出这个位数,就要用数组进行模拟计算,即高精度算法 而在 Java 中有两个类:BigInteger.BigDecimal 分别表示大整数 ...
- 蓝桥杯 ADV-121 算法提高 高精度加法
问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...
- 基础练习 高精度加法
基础练习 高精度加法 时间限制:1.0s 内存限制:512.0MB 问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标 ...
最新文章
- 目标检测中的数据格式转换工具Roboflow
- PyQt5 简易计算器
- 【RecyclerView】 十二、RecyclerView 数据更新 ( 修改单条数据 | 批量修改数据 )
- 糖果传递 (数学题)
- Swaks-smtp瑞士军刀(smtp邮件)
- 【剑指offer】面试题56 - I:数组中数字出现的次数 I
- 内蒙古农大孙志宏教授证实超深度混合宏基因组测序能够对人类肠道微生物组中的低丰度物种进行基因组和功能表征...
- (二)Graphivz 简单结构图及子图
- Kerberos KDC not reachable
- Android:登录保存回显用户信息或配置文件(sharedpreferences)
- 产品经理通用标准工作流程
- 笔记本电脑插入耳机仍然外放(亲测有效)
- 【开源教程9】疯壳·开源蓝牙心率防水运动手环-心率监测
- 开源、私有化部署,这款知识管理系统还有多少惊喜是我们不知道的
- 小srf的游戏 题解
- 1816. 截断句子【我亦无他唯手熟尔】
- sv- typedef
- 强化学习王者荣耀Ai的搭建
- Excel,ppt学习课后总结
- ecw2c认真有效地在线查找帮助!
热门文章
- 详解7类Python运算符及代码举例
- 大数据解密之你的同事都跳槽到了哪些公司
- 70 个常见 Spring 面试题,Java 晋升必会
- 再有人问你Java内存模型是什么,就把这篇文章发给他。
- 从0开始搭建公司后台技术栈,这套架构值得拥有...
- 钉钉崩,钉钉崩,钉钉崩完QQ群崩...
- JeecgBoot Minio版本6.0.13升级到8.0.3修改方法
- Mybatis中tinyint(1)数据自动转化为boolean处理
- 【消息队列MQ】各类MQ比较
- 架构设计 | 接口幂等性原则,防重复提交Token管理