首页 > 其他 > 详细

超长正整数相加

时间:2016-03-18 02:03:21      阅读:193      评论:0      收藏:0      [点我收藏+]

请设计一个算法完成两个超长正整数的加法。用字符串来解决,按位加然后考虑进位就OK。

下面是代码实现:

#ifndef _ADDLONGINTERGER_
#define _ADDLONGINTERGER_
/*================================ Macros ===================================*/
#define FALSE  0
#define TURE 1
/*============================= Include Function ===============================*/
int AddLongInteger(char *addend, char *augend,char *result);

#endif//_ADDLONGINTERGER_


#include"AddLongInteger.h"
#include<string.h>
/***********************************************************/
/************函数名:AddCharInerger*************************/
/************入口参数:加数字符和被加数字符*****************/
/************返回值:相加结果*******************************/
/************函数功能:求两个数相加结果*********************/
/***********************************************************/
static int AddCharInerger(char addend,char augend)
{
	int  ret = (addend -‘0‘) + (augend - ‘0‘);
	return ret;

}
/***********************************************************/
/************函数名:AddLongInteger*************************/
/************入口参数:加数字符串和被加数字符串*************/
/************返回值:相加结果*******************************/
/************函数功能:求两个超长数相加*********************/
/***********************************************************/
int AddLongInteger(char *addend,char *augend,char *result)
{
	int index = 0;
	int tmp = 0;
	int sizeAddend = strlen(addend);
	int sizeAugend = strlen(augend);
	int tempNumber = sizeAddend;
	//判断是否正确输入
	if((NULL == addend)&&(NULL == augend)&&(NULL == result))
	{
		return FALSE;
	}
	if(tempNumber <= sizeAugend)
	{
		tempNumber = sizeAugend;
	}
	while(tempNumber)
	{
		int temp = AddCharInerger(addend[sizeAddend-1],augend[sizeAugend-1])+tmp;
		//判断是否要进位
		if(temp >= 10)
		{
			result[index] = temp%10 + ‘0‘;
			tmp = temp/10;
		}
		else
		{
			tmp = 0;
			result[index] = temp + ‘0‘;
		}
		index++;
		sizeAddend--;
		//判断是否越界
		if(sizeAddend == 0)
		{
			sizeAddend += 1;
			addend[sizeAddend-1] = ‘0‘;
		}
		sizeAugend--;
		//判断是否越界
		if(sizeAugend == 0)
		{
			sizeAugend += 1;
			augend[sizeAugend-1] = ‘0‘;
		}
		tempNumber--;
	}
	//最后是否有进位
	if(tmp > 0)
	{
	    result[index] = (tmp + ‘0‘);
		result[index+1] = ‘\0‘;

	}
	else
	{
		result[index] = ‘\0‘;
	}
	return TURE;
}

#include"AddLongInteger.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/***********************************************************/
/************函数名:inputArray*****************************/
/************入口参数:加数字符串和被加数字符串和结果*********/
/************返回值:判断是否成功***************************/
/************函数功能:输入*********************************/
/**********************************************************/
int inputArrayM(char **addend,char **augend,char **result)
{
	char ch = 0;
	int countAddend = 0;
	int countAugend = 0;
	printf("请输入加数:");
	*addend = (char *)malloc(sizeof(char));
	if(NULL == *addend)
	{
		return FALSE;
	}
	while((ch = getchar()) != ‘\n‘)
	{
		
		*(*addend+countAddend) = ch;
		countAddend++;
		*addend = (char *)realloc(*addend,(countAddend+1)*sizeof(char));
		if(NULL == *addend)
		{
			return FALSE;
		}
	}
	*((*addend)+countAddend) = ‘\0‘;
	printf("请输入被加数:");
	*augend = (char *)malloc(sizeof(char));
	if(NULL == *addend)
	{
		return FALSE;
	}
	while((ch = getchar()) != ‘\n‘)
	{
		
		*(*augend+countAugend) = ch;
		countAugend++;
		*augend = (char *)realloc(*augend,(countAugend+1)*sizeof(char));
		if(NULL == *addend)
		{
			return FALSE;
		}
	}
	*((*augend)+countAugend) = ‘\0‘;
	if(countAugend > countAddend)
	{
		*result = (char *)malloc((countAugend+3)*sizeof(char));
	}
	else
	{
		*result = (char *)malloc((countAddend+3)*sizeof(char));
	}
	return TURE;
}
/*
程序的入口main
*/
int main()
{
	int index = 0;
	char *addend = NULL;
	char *augend = NULL;
	char *result = NULL;
	inputArrayM(&addend,&augend,&result);
	if(FALSE == AddLongInteger(addend,augend,result))
	{
		printf("计算出错\n");
		return 0;
	}
	index = strlen(result)-1;

	for(;index>=0;index--)
	{
		printf("%c",result[index]);
	}
	printf("\n");
	system("pause");
	free(addend);
	free(augend);
	free(result);
	return 0;
}


超长正整数相加

原文:http://zhaoxiaohu.blog.51cto.com/10778115/1752316

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!