第十一章:高精度算法

高精度算法

高精度加法

例题1:高精度加法1157

题目描述

计算两个非负整数之和

输入输出格式

输入

从键盘上输入两个非负整数,每个数占一行,每个数的位数不超过240.

输出

输出只有一行为两个数之和。

样例

输入1

12
13

Copy

输出1

25

Copy

时间及空间限制

1s, 256MB.

解题分析:

很明显在题目中提到了每个数的位数不超过240,显然题目的输出结果肯定会超出了unsigned long long的取值范围。因此简单的将两个超大数加起来是行不通的,实际生活例如这样的例子有很多,那么如何解决两个超大数相加的问题呢?我相信很多同学都会想到利用字符串去实现,实际上我们的确是运用字符串的方法,那么具体又该如何利用字符串的知识去实现两个超大数的相加问题呢?这就是本节课的重点。

用字符串来模拟非常长的整数,这意味着可以用字符数组的每位记录那个数字上的每一位。

解决了存储问题之后,再来回顾一下竖式加法:

整式加法的实质就是模拟每一位的加法与进位,对于十进制加法来说,某-位上的和超过9附会产生进位现象,进位就是保留那处数字的个位数, 然后把十位上的数字加给下一位去, 详见下图:

思考:假设正整数A的长度为n,正整数B的长度为m,那么A+B的长度最大为多少?最小为多少?

答∶ ①max(n,m)+ 1; ②max(n,m);


高精度加法的解题步骤:

①高精度数的读取与存储∶使用字符串方式读取,然后转换为整数,逆向存储到整型数组

②高精度数的加法∶通过数组下标模拟两个加数中每一个位上数的加法


③去除前导0后,逆向输出。


完整代码如下:

#include<bits/stdc++.h>
using namespace std;
int c[1005],d[1005],e[1005];
//c,d分别存2个加数,e存和 
int main()
{
  //1--把2个加数存放到字符串中,再倒置到int 数组中(c,d) 
  string a,b;
  cin>>a>>b;
  int cxb=1,dxb=1,len1=a.size(),len2=b.size();
  for(int i=len1-1;i>=0;i--)
  {
    c[cxb]=a[i]-48;//a[i]-'0'
    cxb++;
  }
  for(int i=len2-1;i>=0;i--)
  {
    d[dxb]=b[i]-48;
    dxb++;
  }
  //2--确定一下和的终点下标
  int zd=max(len1,len2)+1;
  //3--进行逐位的求和
  for(int i=1;i<=zd;i++)
  {
     int t=c[i]+d[i];
     e[i]+=t;
     e[i+1]+=e[i]/10;
     e[i]%=10;
  } 
  //4--讨论终点下标
  if(e[zd]==0)  zd--;
  //5--逆序输出e数组
  for(int i=zd;i>=1;i--)
  {
    cout<<e[i];
  } 
}

Copy

例题2:A+B Problem(主题库2607)

题目描述

高精度加法。输入两个正整数,求它们的和。

输入输出格式

输入

输入两行,每行为一个高精度整数(非负数,长度不超过255)。

输出

输出一行,相加的结果。

样例

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 遗传算法编码方式ri是指在遗传算法中,个体的染色体编码方式。个体的染色体通常是由一个串行的基因序列组成,而基因则是由一系列符号或数字表示的。ri是染色体中的第i个基因的编码方式,可以是二进制编码、十进制编码、整数编码等。不同的编码方式适用于不同的问题类型和求解目标。 二进制编码是最常用的编码方式之一,将一个基因表示为一个固定长度的二进制串,每个位上的0或1代表了两个不同的基因型,通常用来求解优化问题。 十进制编码是将基因表示为十进制数值,可以表示实数值或者精确到某个精度的实数值。常用于求解带有连续变量的优化问题。 整数编码是将基因编码为整数值,通常用于求解离散变量的优化问题。 除了以上常见的编码方式,还可以根据具体问题的特点,设计出适应于特定问题的自定义编码方式。 个体的染色体编码方式ri的选择要考虑到问题的性质、求解的要求以及遗传算法的操作方式,以便进行有效的交叉、变异、选择等遗传算子操作,从而搜索到更好的解空间。 ### 回答2: 遗传算法是一种通过模拟自然进化过程来解决优化问题的算法。在遗传算法中,编码方式是指将问题的解空间表示成某种数据结构,从而能够进行遗传操作。 在遗传算法中,常用的编码方式包括二进制编码、实数编码和排列编码等。而ri是指二进制编码中染色体的第i位。 二进制编码是遗传算法中最常用的编码方式之一。它将问题的解表示为一个由0和1组成的串,每一位代表一个基因或决策变量的取值。例如,假设某个问题需要优化一个二进制串表示的解,其中ri表示该串的第i位。 在遗传算法的演化过程中,通过交叉、变异等遗传操作对染色体进行操作,从而产生新的个体。通常,遗传算法会根据问题的特点和要求来确定编码方式。 总之,ri是指遗传算法中二进制编码方式下染色体的第i位,它代表了一个基因或决策变量的取值。这种编码方式是遗传算法中常用的一种方式,能够有效地表示问题的解空间,从而实现问题的优化。 ### 回答3: 遗传算法是一种模拟自然界生物进化过程的优化算法。在遗传算法中,编码方式是决定个体表现形式和基因信息传递方式的重要因素。 遗传算法中常见的编码方式主要有二进制编码、实数编码和排列编码等。其中,ri表示的是二进制编码方式。 二进制编码是将待优化问题的解表示为一串二进制数的形式。每一个二进制数位都被称为一个基因,并且每一个基因代表问题的一个特定特征或决策变量的取值范围。一个个体的染色体就是由这些基因组成的,通过对这些基因的交叉、变异和选择等操作来模拟生物进化的过程。 在进行遗传算法的优化过程中,通过不断迭代的交叉、变异和选择操作,借助选择择优个体和淘汰劣质个体的机制,逐渐优化出适应度较高的个体,并逐步逼近最优解。 通过使用二进制编码方式ri,遗传算法能够很好地应用于不同类型的优化问题,并且具有较好的可扩展性和适应性。二进制编码方式能够直接映射问题的解空间,并能够进行高效的遗传操作,提高了算法的计算效率和搜索能力。 总之,遗传算法的编码方式ri指的是二进制编码方式,通过对基因进行交叉、变异和选择等操作,模拟生物进化的过程,来求解复杂的优化问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值