#include<bits/stdc++.h> using namespace std; /* 题目:1268: 【基础】高精度加法 解题思路: 第一步:用string读入两个高精度整数,s1,s2 第二步:建立两个整数数组a和数组b, 然后将两个高精度整数,s1,s2逆序存入两个整数数组a和数组b 第三步:从左向右对数组a和数组b进行求和,然后将结果存入数组c 然后,再对c数组从左向右逐一进位 第四步:从右向左,逆序输出结果 */ string s1,s2;//高精度整数 int a[250],b[250],c[500],len,p; //s1,s2皆为不超过240位的正整数,所以数组a和数组b开250, //两个不超过240位的整数相加,结果最多不会超过241位,因此c数组开500够的 //len存两个整数中较长的字符串的长度 int main(){ cin>>s1>>s2; // 将两个高精度整数,s1,s2逆序存入两个整数数组a和数组b for(int i=0;i<s1.size();i++){ a[s1.size()-i-1]=s1[i]-'0';//注意:要减去字符'0' /* s[i]-->a[ ] s1="968"--->869 s1[0]-->a[2] s1[1]-->a[1] s1[2]-->a[0] s1[i]-->a[s1.size()-1-i] */ } //输出测试看是否有逆序,再接着继续 // for(int i=0;i<s1.size();i++){ // cout<<a[i]<<" "; // } for(int i=0;i<s2.size();i++){ b[s2.size()-i-1]=s2[i]-'0';//注意:要减去字符'0' } //从左向右对数组a和数组b进行求和,然后将结果存入数组c // 然后,再对c数组从左向右逐一进位 //加法的次数取决于两个整数中较长的字符串长度 len=s1.size(); if(s1.size()<s2.size()) { len=s2.size(); } //逐位相加 for(int i=0;i<len;i++){ c[i]=a[i]+b[i]; } //逐位进位 for(int i=0;i<len;i++){ //两位的才进位, if(c[i]>=10){ c[i+1]=c[i+1]+c[i]/10;//后面的数进位,在原来的基础上加上前面一个数的十位 c[i]=c[i]%10;//当前的数保留个位 } } //逆序输出结果 //两个不超过len位的整数做加法,结果可能是len+1位 //判断两个不超过len位的整数做加法,结果是len位还是len+1位 if(c[len]!=0){ len++; } //逆序输出结果 for(int i=len-1;i>=0;i--){ cout<<c[i]; } //判断是否要输出负号 if(f=='-') cout<<'-'; // 从右向左,逆序输出结果,从第一个遇到的非0元素开始输出 for(int i=len-1;i>=0;i--){ if(c[i]!=0){ p=i;//从右向左,第一个0元素的下标 break; } } //逆序从第一个非0元素开始输出 for(int i=p;i>=0;i--){ cout<<c[i]; } return 0; } /************************************************************** Problem: 1269 User: hulaoshi Language: C++ Result: Compile Error ****************************************************************/