加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数加法

发布时间:2020-12-14 02:45:17 所属栏目:大数据 来源:网络整理
导读:大数加法 要点: 翻转数字串 数字字符相加 ?数字转换成字符 带进位相加 #include iostream#include stdarg.h#include stringusing namespace std;//不定长度参数加法int charAdd(char first,...){int sum=0;char i=first;va_list args;va_start(args,first);

大数加法

要点:

  • 翻转数字串
  • 数字字符相加
  • ?数字转换成字符
  • 带进位相加

#include <iostream>
#include <stdarg.h>
#include <string>
using namespace std;

//不定长度参数加法
int charAdd(char first,...)
{
	int sum=0;
	char i=first;
	va_list args;
	va_start(args,first);
	while(i!='a')
	{
		sum+=(i-'0');
		i=va_arg(args,char);
	}
	va_end(args);
	return sum;
}

//字符串翻转
string reverse(string str)
{
	for (int i=0;i<str.length()/2;++i)
	{
		swap(str[i],str[str.length()-1-i]);
	}
	return str;
}

//int型转换为字符型
char intToChar(int i)
{
	return char(i+'0');
}

//计算大数加法
string getResult(string strNum1,string strNum2)
{
	//翻转两个数字串,从而方便计算
	strNum1=reverse(strNum1);
	strNum2=reverse(strNum2);
	//计算两个字符串的长度
	int str1Length=strNum1.length();
	int str2Length=strNum2.length();
	//确保第一个字符串的长度不小于第二个
	if(str1Length<str2Length)
	{
		swap(strNum1,strNum2);
	}
	char carry='0';              //进位
	char *result=new char[str1Length+2];    //声明大数加法结果
	memset(result,str1Length+2);
	int i;
	for(i=0;i<str2Length;++i)               //
	{
		int temp=charAdd(strNum1[i],strNum2[i],carry,'a');
		carry=intToChar(temp/10);
		result[i]=intToChar(temp%10);
	}
	while (i<str1Length)
	{
		int temp=charAdd(strNum1[i],'a');
		carry=intToChar(temp/10);
		result[i]=intToChar(temp%10);
		++i;
	}
	//观察最后是否有进位
	if (carry=='1')
	{
		result[i]='1';
	}
	return result;
}

int main()
{
	string str1;
	string str2;
	while (true)
	{
		cin>>str1>>str2;
		cout<<str1<<" + "<<str2<<" = "<<reverse(getResult(str1,str2))<<endl;
	}
	return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读