基础练习 高精度加法

**问题描述**
  输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
  
**输入格式**
  输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。
**输出格式**
  输出一行,表示a + b的值。
  
**样例输入**
20100122201001221234567890
2010012220100122
**样例输出**
20100122203011233454668012

**解题思路**
    很明显,a、b数的长度超过了int。只能用数组的解题方法。
    定义两个数组a[]和b[]。其中a[0]视为个位,a[1]视为十位,以此类推。
    计算c=a+b时。让相应的位相加。个位与个位相加a[0]+b[0],如果产生了进位,那么十位与十位相加时要加上进位。

**附上代码**

#include<iostream>
#include<string.h>
using namespace std;
const int maxn=100;
int a[maxn]={0};
int b[maxn]={0};
int c[maxn]={0};
int main()
{
	void InputNum(char*,int,int[]);//数组从0~n分别记录个位、十位… 
	void Add(int&);	//相应的位进行相加 
	int max_len=0;	//记录最大的数组长度 
	string s1;
	string s2; 
	cin>>s1>>s2;
	s1.length()>=s2.length()?max_len=s1.length()-1:max_len=s2.length()-1;
	InputNum(&s1[0],s1.length()-1,a);
	InputNum(&s2[0],s2.length()-1,b);
	Add(max_len);
	//逆序输出 
	for(int i=max_len;i>=0;i--)
		cout<<c[i];
	cout<<endl;
	
	return 0;
} 
void InputNum(char* p,int n,int temp[])
{
	for(int i=n;i>=0;i--)
		temp[n-i]=*(p+i)-'0';
}
void Add(int& max_len) //这里用"引用",是为了最高位 
{					//出现进位而需要将数组长度+1的情况 
	int r=0;//记录进位 
	for(int i=0;i<=max_len;i++)
	{
		int sum=a[i]+b[i]+r;
		r=sum/10;
		c[i]=sum%10;
	}
	if(r!=0)
	{
		max_len++;
		c[max_len]=r;
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值