基础练习 高精度加法

**问题描述**
  输入两个整数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
#include
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<=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;
	}
}

你可能感兴趣的:(C语言)