大数相加算法

作者: baby_double | 来源:发表于2018-09-20 18:12 被阅读0次

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;
}

相关文章

  • [算法] 大数相加

    看到个有意思的问题 “给定2个整数,这两个数大的连long类型都装不下,如何计算两数和” 实践了一下,可以用数组存...

  • 算法——大数相加

    浏览器可以计算15位数字的加减,对于16位的数字它就搞不定了,但是,最近出了bigint数据类型,可以在16位及以...

  • 大数相加算法

    1、题目:实现两个大数相加。2、算法流程:(1)大数可能超出任何一种整数类型,会引发溢出问题,所以用字符串的格式存...

  • OC大数相加相乘算法

    前些天做了份笔试题,最后一道题是写一个大数相乘的算法,太久没做题了,也没有草稿纸,脑子没动起来,笔就开始天马行空了...

  • 前端-大数相加

    大数相加

  • 大数相加

    大数相加类

  • JSCoding

    大数相加 深拷贝

  • 大数相加

    大数相加(java) 一、BigDecimal工具类 二、转换为字符串解法

  • 20181125_ARTS_W8

    Algorithm(至少一个算法题) 415. Add Strings题目描述:两个用字符串表示的大数相加解题思路...

  • JS大数字相加

    问:如何计算大数字的相加?大到可以溢出的那种。 大数字相加,避免使用传统的相加(可能会溢出),所以使用数学题的思路...

网友评论

    本文标题:大数相加算法

    本文链接:https://www.haomeiwen.com/subject/ozunnftx.html