【模拟】高精度加法运算

基本思路

高精度运算,是数据量较大时的必备选择,可以选择用 类模板或者写数组的函数,本文的思路选择后者,具体实现过程见代码。
基本假设是:输入的数据没有前导0,如果有前导0,则要进行去0操作,同时还要注意如果最后的结果就是0,不能把最后一个0给去掉。

实现代码

/*
Author:snnu_lgw
Date:2020/7/2 
*/
#include
using namespace std;
typedef long long ll;

string add(string str1,string str2)
{ //高精度加法,参数为两个输入的数据(用string来存储)
	string str;
	int len1 = str1.length(),len2 = str2.length();
	
	if(len1<len2) //补充前导0,然后按位进行加法运算 
		for(int i=1;i<=len2-len1;i++)//目的是为了对齐位数
			str1 = "0"+str1;
	else 
		for(int i=1;i<=len1-len2;i++)
			str2 = "0"+str2;
	
	int len = str1.length();
	int cf = 0;//进位
	for(int i=len-1;i>=0;i--)
	{//从最后一位开始加
		int temp = (str1[i]-'0')+(str2[i]-'0')+cf;
		cf = temp/10;//进位
		temp%=10; // 保留在本位的数据
		str = char(temp+'0')+str;
	}	
	if(cf!=0)//最后仍有进位,则继续补充前面 
		str = char(cf+'0')+str;
/*
**删除前导0,同时防止删除所有的'0' 
	int len_zero = 0;
	len = str.length();//更新len的程度
	while(str[len_zero]=='0')
	{
		len_zero++;	
	} 
	if(len-len_zero>0)str = str.substr(len_zero,len-len_zero);
*/	
	return str;
} 

int main()
{
	string str1,str2,str;
	cin>>str1>>str2;
	
	str = add(str1,str2);
	
	cout<<str;
	return 0;
}

你可能感兴趣的:(模拟)