大数相加算法

1、题目:实现两个大数相加。
2、算法流程:
(1)大数可能超出任何一种整数类型,会引发溢出问题,所以用字符串的格式存储字符串a,b;
(2)获取字符串a的长度为aLen,字符串b的长度为bLen;
(3)比较aLen和bLen的大小,用maxLen保存更大值。
(4)创建数组aArr,大小为maxLen,保存字符串a每一位上的值,举例下图所示。


image.png

(5)创建数组bArr,大小为maxLen,保存字符串b每一位上的值,不够的补0,例如。


image.png

(6)创建数组sumArr,大小为maxLen,保存两数之和。
(7)创建一个整数用于保存两数相加的进位jin,初始化等于0,是因为两个数的个位数相加进位一定等于0。
(9)因为两数相加一般从个位开始,所以用sumArr[maxLen-1]保存(a的个位+b的个位的+进位)的和除以10的余数,获取进位jin=(a的个位+b的个位的+进位)的和除以10的整除数。具体如下所示:
image.png

(10)各对应的位数相加完之后,判断进位jin是否等于1,如果等于1则输出 cout <<"1";
然后从高位到低位输出sumArr的各位数。

3、具体代码如下所示:

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
 char* a="11111111111111111111111111";
 char* b="91111111111111111111111111111111111";
 int aLen=strlen(a);
 int bLen=strlen(b);
 cout << "aLen="<<aLen<<" bLen="<<bLen<<endl;
 int maxLen=0;

 if(aLen>bLen){
    maxLen=aLen;
 }else{
     maxLen=bLen;
 }
 cout << "maxLen="<<maxLen<<endl;
 int* aArr=new int[maxLen];
 int* bArr=new int[maxLen];
 int* sumArr=new int[maxLen];

 for(int i=maxLen-1;i>=0;i--){
    if(aLen<=0){
        aLen=0;
        aArr[i]=0;
    }else{
        aArr[i]=a[--aLen]-'0';
    }
    cout << aArr[i];
 }

 cout <<endl;
 for(int j=maxLen-1;j>=0;j--){
    if(bLen<=0){
        bArr[j]=0;
    }else{
       bArr[j]=b[--bLen]-'0';

    }
    cout << bArr[j];
 }
 cout <<endl;
 int jin=0;
 for(int k=maxLen-1;k>=0;k--){
    sumArr[k]=(aArr[k]+bArr[k]+jin)%10;
    jin=(aArr[k]+bArr[k]+jin)/10;
    cout << sumArr[k];
 }
 cout <<endl;
 if(jin!=0){
    cout <<"1";
 }
 for(int t=0;t<maxLen;t++){
    cout << sumArr[t];
 }
return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,105评论 0 1
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,059评论 0 13
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,846评论 0 10
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,208评论 0 13