C++大整数加法解题思路及参考代码

 更新时间:2024年03月19日 10:19:32   作者:绘绘~  
大整数加法的思路是用两个数组储存两个整数的每一位然后分别相加,下面这篇文章主要给大家介绍了关于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;
}

总结 

到此这篇关于C++大整数加法解题思路及参考代码的文章就介绍到这了,更多相关C++大整数加法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 基于C语言构建一个独立栈协程和共享栈协程的任务调度系统

    基于C语言构建一个独立栈协程和共享栈协程的任务调度系统

    这篇文章主要为大家详细介绍了如何基于C语言构建一个独立栈协程和共享栈协程的任务调度系统,文中的示例代码讲解详细,需要的可以参考下
    2024-02-02
  • 用c++实现x的y次幂的代码

    用c++实现x的y次幂的代码

    以下实例是对使用c++实现x的y次幂的解决方法进行了介绍。需要的朋友参考下
    2013-05-05
  • C语言实现图的邻接矩阵存储操作

    C语言实现图的邻接矩阵存储操作

    这篇文章主要为大家详细介绍了C语言实现图的邻接矩阵存储操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • C/C++的内存管理你了解嘛

    C/C++的内存管理你了解嘛

    这篇文章主要为大家介绍了C/C++的内存管理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C语言模拟实现atoi函数的实例详解

    C语言模拟实现atoi函数的实例详解

    这篇文章主要介绍了C语言模拟实现atoi函数的实例详解的相关资料,atoi函数,主要功能是将一个字符串转变为整数,这里就实现这样的函数,需要的朋友可以参考下
    2017-08-08
  • 详解c++中的trait与policy模板技术

    详解c++中的trait与policy模板技术

    trait模板和policy模板技术是把模板的trait和policy这两个针对不同具体类型有变化的方面抽离出来形成两个独立的模板。由于trait和policy本身是模板,它的行为是可配置的,在模板中通过组合或者以模板实参传进来的方式使用trait和policy,就可以配置出不同的具体实现
    2021-06-06
  • C语言实现扫雷小游戏简单版

    C语言实现扫雷小游戏简单版

    这篇文章主要为大家详细介绍了C语言实现扫雷小游戏简单版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++函数返回值为对象时,构造析构函数的执行细节

    C++函数返回值为对象时,构造析构函数的执行细节

    C++函数返回值为对象时,构造析构函数的执行细节,需要的朋友,可以参考下
    2013-02-02
  • C++实现恶搞电脑关机小程序的示例代码

    C++实现恶搞电脑关机小程序的示例代码

    这篇文章主要为大家详细介绍了如何利用C++实现一个简单的恶搞电脑关机小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-11-11
  • C语言之函数递归的实现

    C语言之函数递归的实现

    本文主要介绍了C语言之函数递归的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论