因为基本数据类型中整型的内存范围有限,所以直接进行大数之间的运算,不仅浪费空间,而且运行缓慢,甚至有些会导致数据溢出。

那怎么办呢?

这时我们就想直接不行,那咱们来间接的。

这就是我们今天主要要讲的:通过字符串来进行大数计算。

1、首先预处理和命名空间自不必说

2、声明所需字符串数组(这里以最大40位大数为例,所以字符数组长度设为41,最后一个留给'\0'),记录字符串长度,并对字符串长度进行记录。声明数组并对其初始化。(适当可加异常处理)

3、将数字字符串逆序添加到数组中(字符与相应数字的存储相差48)。

4、首先判断A 和 B两字符串的长度,根据长度来进行选择判断条件。因为相加的算法是按位相加,所以或长或短决定了'+'的操作。

花开两朵,各表一枝。咱们只看第一个循环结构就行。第一个循环结构,假设A_len>B_len(在最前面的flag判断),当有余位进行相加运算时,先将最小位的数相加(+x)为的是进位,再进行取余保留在原位。相加运算结束后,接着就是按序储存剩下长的没有运算的数了。最后逆序输出(因为我们是逆序相加存储的)

5、下面送上完整代码

#include<iostream>#include<stdio.h>#include<cstring>using namespace std;
int main(){ char A[41],B[41]; gets(A); gets(B); //加一个异常处理程序 int A_len=strlen(A); int B_len=strlen(B); int flag=0; if(strlen(A)>strlen(B)) flag=1; int C[(A_len>B_len ?A_len :B_len)+1],D[A_len],E[B_len]; memset(C,0,sizeof(C)); memset(D,0,sizeof(D)); memset(E,0,sizeof(E)); for (int i=1;i<=A_len;i++) { D[A_len-i]=A[i-1]-48; } for (int i=1;i<=B_len;i++) { E[B_len-i]=B[i-1]-48; } int lenC=0; int x=0;
if (flag){ while(lenC<B_len){ C[lenC]=D[lenC]+E[lenC] +x;
x=C[lenC]/10; C[lenC]=C[lenC]%10; lenC++;}
while(lenC<A_len){ C[lenC]=D[lenC]+x; x=0; lenC++;} } else { while(lenC<A_len){ C[lenC]=D[lenC]+E[lenC] +x; x=C[lenC]/10; C[lenC]=C[lenC]%10; lenC++;} while(lenC<B_len){ C[lenC]=E[lenC]+x; x=0; lenC++;} } C[lenC]=x; if(C[lenC]==0) lenC--; for(int i=lenC;i>=0;i--) cout<<C[i]; cout<<endl; return 0;}

C++:用字符串数组实现大数运算,以两个不高于40位的大数运算为例。的更多相关文章

  1. java大数类,两个不超过20位都不为0的十进制字符串相乘,华为笔试题

    import java.math.BigInteger; import java.util.*; import java.io.*; public class Main { public static ...

  2. Swift - 将字符串拆分成数组(把一个字符串分割成字符串数组)

    在Swift中,如果需要把一个字符串根据特定的分隔符拆分(split)成字符串数组,通常有如下两种方法: 1,使用componentsSeparatedByString()方法 1 2 3 4 5 l ...

  3. C语言为运算及 两个变量的赋值问题

    #include <stdio.h>#define ARRAY_SIZE 10int main() {    int arr[ARRAY_SIZE] = {51,116,53,120,85 ...

  4. 探讨js字符串数组拼接的性能问题

    这篇文章主要介绍了有关js对字符串数组进行拼接的性能问题,字符串连接一直是js中性能最低的操作之一,应该如何解决呢?请参看本文的介绍 我们知道,在js中,字符串连接是性能最低的操作之一. 例如: 复制 ...

  5. java求字符串数组交集、并集和差集

    import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.Ma ...

  6. Javascript-常用字符串数组操作

    字符串的操作在编写Js的过程中是不可避免的 因为它太多的API 还有相似的API让我们很头痛 为了避免以后遇到模拟两可的问题 还是做个笔记比较好 把常用的字符串操作记录下来成笔记 方便以后查找 No1 ...

  7. Matlab 之 字符串数组查找

    Matlab的优势在于向量操作,字符串操作往往费时费力,但是如果能充分利用Matlab自带的一些函数,也可以取得不错的效果.下面就介绍一下字符串数组查找的小技巧. 字符串数组我通常会选择应用cell格 ...

  8. C语言学习018:strdup复制字符串数组

    在C语言学习005:不能修改的字符串中我们知道字符串是存储在常量区域的,将它赋值给数组实际是将常量区的字符串副本拷贝到栈内存中,如果将这个数组赋值给指针,我们可以改变数组中的元素,就像下面那样 int ...

  9. .net字符串数组查找方式效率比较

    下面是代码: static void Main(string[] args) { string[] arr = new string[] { "AAA", "BBBB&q ...

随机推荐

  1. Spring源码-IOC部分-Spring是如何解决Bean循环依赖的【6】

    实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring ...

  2. Spring @Cacheable 缓存不生效的问题

    最近在项目中使用了Ehcache缓存,使用方式是用Spring提供的 @Cacheable 注解的方式,这种方式简单.快速.方便,推荐使用. 在使用的过程中,遇到了缓存不生效的情况,经过分析处理,总结 ...

  3. High ASCII字符从bat文件到dos控制台的转化问题

    背景是这样的,由于项目需要,需要用silent install的方式安装一些程序,而安装参数中有一些High ASCII字符,如ùé.通过代码,使用默认编码(ANSI,说明下,我用的是法语的系统)创建 ...

  4. synchronize类锁用父类作为锁能否锁住代码块

    如果有一个父类,Demo如下 public class Demo { public void demo1(){ synchronized (Demo.class){ while (true){ Sys ...

  5. 修改注册表使win server 2012R2开机进入桌面而不是开始界面

    首先,使用WIN+R快捷键打开运行命令,使用命令打开注册表编辑器 然后,进入注册表之后,我们一次定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ ...

  6. The official raywenderlich.com Objective-C style guide.

    The official raywenderlich.com Objective-C style guide. This style guide outlines the coding convent ...

  7. OSPF路由协议基础知识

    OSPF路由协议 1.OSPF的基本概念 2.OSPF邻接关系的建立 3.OSPF的应用环境 4.OSPF的基本配置命令 1.OSPF区域为了适应大型的网络,OSPF在AS(自治系统)内划分多个区域. ...

  8. k8s之yaml文件详解

    k8s之yaml文件详解 目录 k8s之yaml文件详解 1. k8s支持的文件格式 2. YAML语言格式 3. 查看api资源版本标签 4. 编写nginx-test.yaml资源配置清单 4.1 ...

  9. 抽象类,interface接口,接口和继承的区别

    一.抽象类 需要抽象类的原因:父类方法不确定性的问题.考虑将该方法设计为抽象(abstract)方法所谓抽象方法就是没有实现的方法.所谓没有实现就是指,没有方法体.当一个类中存在抽象方法时,需要将该类 ...

  10. 关于Java多线程-interrupt()、interrupted()、isInterrupted()解释

    多线程先明白一个术语"中断状态",中断状态为true,线程中断. interrupt():就是通知中止线程的,使"中断状态"为true. isInterrupt ...