题目描述题目要求计算多个大整数的和。输入包含最多100100100行每行一个非负整数可能非常大长度不超过100100100位以单独一行的一个000表示输入结束。输出这些整数的总和。输入格式输入包含若干行每行一个由数字组成的字符串表示一个非负整数。最后一行是一个单独的000表示输入结束。输出格式输出一行即所有输入整数的和。样例输入123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 0输出370370367037037036703703703670题目分析本题的核心是实现大整数加法。由于每个整数最多有100100100位直接使用内置整数类型如long long最多约191919位无法存储需要手动模拟竖式加法过程。加法模拟大整数加法从最低位个位开始逐位相加并处理进位。具体步骤将两个加数按字符串形式存储从末位向首位遍历。对应位相加加上上一位的进位得到当前位的和。当前位的数字为和模101010进位为和除以101010。处理完所有位后若仍有进位则在最高位添加进位。多整数求和对于多个大整数相加可以依次将每个数累加到一个结果变量中。结果变量也以字符串或整数数组形式存储初始为000。每读入一个新数将其与当前结果相加更新结果。实现细节使用vectorint或string存储结果注意低位在数组前端还是后端的选择。常见做法是低位存储在索引000处这样进位扩展时只需在末尾追加。参考代码中使用了固定长度的字符数组result长度为110110110从末尾开始向前存储这样可以避免反转字符串。但需要注意输出时跳过前导零。边界情况输入可能只有一个000此时应输出000。输入的数字可能包含前导零如00123但通常输入不会这样。如有前导零加法结果应正确处理。复杂度分析每加一个数的时间复杂度为O(max⁡(len(result),len(num)))O(\max(\text{len}(\text{result}), \text{len}(\text{num})))O(max(len(result),len(num)))总复杂度O(总数×最大长度)O(\text{总数} \times \text{最大长度})O(总数×最大长度)完全可接受。代码实现// Integer Inquiry// UVa ID: 424// Verdict: Accepted// Submission Date: 2016-07-13// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;intmain(intargc,char*argv[]){ios::sync_with_stdio(false);string line,resultstring(110,0);while(getline(cin,line),line!0){intdigit0,carry0;intjresult.length()-1;for(intiline.length()-1;i0;i--,j--){digitline[i]-0result[j]carry;result[j]digit%10;carrydigit/10;}while(j0){digitresult[j]carry;result[j]digit%10;carrydigit/10;j--;}}for(inti0;iresult.length();i){if(result[i]0)continue;for(intji;jresult.length();j)cout(char)(result[j]0);break;}coutendl;return0;}