现在的位置: 首页 > 综合 > 正文

大数的加减

2013年04月17日 ⁄ 综合 ⁄ 共 1108字 ⁄ 字号 评论关闭
#include<iostream>
using namespace std;

void sum(char *a, char *b, char *sum);

int main()
{
	char a[] = "5234563847377488737676663332233456612345678333445";
	char b[] = "9567832990876544556677777345512345678901234";
	const int size = 100;
	char c[size];
	memset(c, 0, sizeof(char)*size);

	sum(a, b, c); //求和
        //处理之前,c数组数字个数比较长的那个a多一位
	if('0'==c[0])
	{
		for(int i=0; i<size; i++)
		{
			c[i] = c[i+1];
		}
	}
	cout<<c<<endl;
	
	return 0;
}

void SumExt(char *a, char *b, char *sum, int aLength, int bLength)   //aLength一定比bLength长
{
	if(NULL==a || NULL==b || NULL==sum)
	{
		return;
	}
	if(aLength<bLength)
	{
		return;
	}

	int length = aLength + 1;

	char zero = '0';
	int temp = 0;
	char one = '1';
	char carry = zero;
	while(1)
	{
		temp = 0;
		if(bLength>0)
		{
			temp = (int)((a[aLength-1] - zero) + (b[bLength-1] - zero) + (carry - zero));
			aLength--;
		    bLength--;
		}
		else
		{
			if(aLength>0)
			{
				temp = (int)((a[aLength-1] - zero) + (carry - zero));
				aLength--;
			}
			else
			{
				temp = (int)(carry - zero);
			}
		}
		if(temp/10==1)
		{
			carry = one;
		}
		else
		{
			carry = zero;
		}
		sum[length-1] = temp%10 + zero;
		length--;
		if(length<0)
		{
			break;
		}
	}
}


void sum(char *a, char *b, char *sum)
{
	if(NULL==a || NULL==b || NULL==sum)
	{
		return;
	}
	int aLength = strlen(a);
	int bLength = strlen(b);

	if(aLength>=bLength)
	{
		SumExt(a, b, sum, aLength, bLength);
	}
	else
	{
		SumExt(b, a, sum, bLength, aLength);
	}

}

【上篇】
【下篇】

抱歉!评论已关闭.