【问题描述】大整数求和
用某种程序设计语言进行编程时,可发能需要处理非常大或者运算精度要求非常高的整数(称为大整数),这种大整数用该语言的基本数据类型无法直接表示。处理大整数的一般方法是用数组存储大整数,即开辟一个比较大的整型数组,数组元素代表大整数的一位,通过数组元素的运算模拟大整数的运算。
已知大整数,,求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]; } }