java实现超长正整数的加法_超长正整数相加

请设计一个算法完成两个超长正整数的加法。用字符串来解决,按位加然后考虑进位就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

/***********************************************************/

/************函数名: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

#include

#include

/***********************************************************/

/************函数名: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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值