数据结构实训(一)--- 大整数求和

【问题描述】大整数求和
用某种程序设计语言进行编程时,可发能需要处理非常大或者运算精度要求非常高的整数(称为大整数),这种大整数用该语言的基本数据类型无法直接表示。处理大整数的一般方法是用数组存储大整数,即开辟一个比较大的整型数组,数组元素代表大整数的一位,通过数组元素的运算模拟大整数的运算。
已知大整数,,求C=A+B。可以用两个顺序表A和B分别存储两个大整数,用顺序表C存储求和结果。为了便于执行加法运算,可以将大整数的低位存储到顺序表的低端,顺序表的长度表示大整数的位数。
【输入形式】两个大整数的数位数字。
【输出形式】按照从高位到低位的顺序输出求和结果C。
【样例输入】
987654321
99997531
【样例输出】
1087651852
【说明】如果从键盘输入大整数,一般用字符数组存储,这样无需对大整数进行分段输入,当然输入到字符数组后需要将字符转换为数字。

#include<iostream>
#include<string>
using namespace std;

const int MaxSize = 1000;
int main()
{
    string s1,s2;
    cin >> s1 >> s2;
    int* num1 = new int[MaxSize];
    int* num2 = new int[MaxSize];
    int* num3 = new int[MaxSize+1];
    int len1 = s1.size();
    int len2 = s2.size();
    for(int i=0; i < len1; i++){
        int temp = s1[i] - '0';
        num1[s1.size()-1-i] = temp;
    }

    for(int i=0; i < len2; i++){
        int temp = s2[i] - '0';
        num2[s2.size()-1-i] = temp;
    }

    int over = 0;
    int length = 0;
    for(int i=0; i<len1||i<len2; i++){

        num3[i] = (num1[i] + num2[i] + over)%10;
        over = (num1[i] + num2[i] + over)/10;
        length++;
    }

    if(over > 0){
        num3[length] = over;
    }
    else{
        length--;
    }

    for(int i=length; i>=0 ; i--){
        cout<<num3[i];
    }
}
原文地址:https://www.cnblogs.com/DullRabbit/p/12558690.html