目录
  • 题目
    • 输入
    • 输出
    • 样例输入
    • 样例输出
  • 解题思路
    • 参考代码
      • 附:c++ 大整数加法、减法、乘法
        • 总结 

          题目

          输入

          输入数据有多组。首先输入一个整数T,表示有T组输入。

          每组输入两个大整数,并用空格隔开。每个整数最多1000位。没有负数输入。

          输出

          对于每组输入,输出两个整数的和,单独占一行。

          样例输入

          2
          1 2
          112233445566778899 998877665544332211
          

          样例输出

          3
          1111111111111111110
          

          解题思路

          这个整体思路大家都知道,要注意的点就是在边界情况的处理上,比如进位的操作,最高位进位判断这些。还有可能有前导0的情况;

          参考代码

          #include<bits/stdc++.h>
          
          using namespace std;
          
          string get_add(string a, string b) {
              int i, add = 0, len = max(a.length(), b.length());
              int nums[1001] = {0};
              reverse(a.begin(), a.end());
              reverse(b.begin(), b.end());
              for(i = 0; i < len; i++) {
                  int num1 = (i < a.length()) ? (a[i]-'0') : 0;
                  int num2 = (i < b.length()) ? (b[i]-'0') : 0;
                  int num = num1 + num2 + add;
                  nums[i] = num % 10;
                  add = num / 10;
              }
          
              if(add > 0) // 处理最高位进位
                  nums[i] = add;
              string c;
              while(i >= 0) { // 数组逆序拼接得到结果
                  c += to_string(nums[i]);
                  i--;
              }
          
              if(c[0] == '0' && c.length() > 1) // 移除前导0
                  c.erase(0, 1);
              return c;
          
          }
          
          int main() {
              int T;
              cin >> T;
              string a, b;
              getline(cin, a);
              while(T--) {
                  cin >> a >> b;
                  string c = get_add(a, b);
                  cout << c << endl;
              }
              return 0;
          }

          附:c++ 大整数加法、减法、乘法

          #include<string.h>
          #include<iostream>
          
          std::string add(std::string s1,std::string s2) {
          	std::string s3;
          	if(s1.length()<s2.length()) {
          		while(s1.length()<s2.length()) {
          			s1="0"+s1;
          		}
          	} else {
          		while(s2.length()<s1.length()) {
          			s2="0"+s2;
          		}
          	}
          	int up=0;
          	int k;
          	int len=s1.length()-1;
          	while(len>=0) {
          		k=(s1.at(len) + s2.at(len) + up - '0' - '0');
          		up = k/10;
          		s3=(char)(k % 10 + '0') + s3;
          		len--;
          	}
          	if(up)
          		s3="1"+s3;
          	return s3;
          }
          
          std::string sub(std::string s1,std::string s2) {
          	if(s1==s2) {
          		return "0";
          	}
          	std::string s3;
          	bool flag=false;
          	if(s1.length()<s2.length() || (s1.length()==s2.length() && s1<s2)) {
          		std::string s=s1;
          		s1=s2;
          		s2=s;
          		flag=true;
          	} else {
          		s3="";
          	}
          	while(s2.length()<s1.length()) {
          		s2="0" + s2;
          	}
          	int k,down=0;
          	for(int i=s1.length()-1; i>=0; i--) {
          		k=s1[i] -s2[i] +down;
          		if(k<0) {
          			down=-1;
          			k=10+k;
          		} else {
          			down=0;
          		}
          		s3=(char)('0' + k) + s3;
          	}
          	k=0;
          	while(s3[k]=='0' ) {
          		k++;
          	}
          	s3=s3.substr(k);
          	if(flag)
          		s3="-"+s3;
          	return s3;
          }
          
          std::string mul(std::string s1,std::string s2) {
          	if(s1=="0" || s2=="0")
          		return "0";
          	if(s1=="1")
          		return s2;
          	if(s2=="1")
          		return s1;
          	std::string s3;
          	int len=s1.length() + s2.length() -1;
          	for(int i=0; i<len; i++) {
          		s3+="0";
          	}
          	int up=0,k;
          	std::string flag="";
          	for(int i=s1.length()-1; i>=0; i--) {
          		for(int j=s2.length()-1; j>=0; j--) {
          			k=s3[i+j]-'0' + (s1[i]-'0')*(s2[j]-'0') ;
          			up=k/10;
          			s3[i+j]=(char)(k%10+'0');
          			int d=1;
          
          			while(up>0) {
          				//首位进位
          				if(i==0 && j==0 && up>0) {
          					flag=(char)("0"+ up);
          					break;
          				}
          				k=(char)(s3[i+j-d]+up-'0');
          				up=k/10;
          				s3[i+j-d]=(char)(k%10+'0');
          				d++;
          			}
          
          		}
          	}
          	return flag + s3;
          }

          总结 

          声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。