您的位置:首页 > 编程语言 > C语言/C++

C语言两个以字符串形式出现的超级大数相加

2013-04-27 16:16 549 查看
任意两个超级大的整数以字符形式出现,如"999999999999999999999",计算它们的和,结果仍以字符串形式输出。

 

#include <stdio.h>
#include <string.h>
#define  MAX_LEN 1024

int  CalcBigNumberAdd(const char *pNumA, const char *pNumB, char *pRet)
{
int iLenA = 0;
int iLenB = 0;
int iMax  = 0;
int iNumA = 0;
int iNumB = 0;
int iTmpSum = 0;
char cNeedCarry  = 0;

iLenA = strlen(pNumA);
iLenB = strlen(pNumB);
iMax = (iLenA > iLenB?iLenA:iLenB);

while (iMax > 0)
{
iNumA = (iLenA > 0?(pNumA[iLenA - 1] - '0'):0);
iNumB = (iLenB > 0?(pNumB[iLenB - 1] - '0'):0);

if (cNeedCarry)
{
iTmpSum = iNumA + iNumB + 1;
}
else
{
iTmpSum = iNumA + iNumB;
}

if (iTmpSum >= 10)
{
cNeedCarry = 1;
pRet[iMax - 1] = (iTmpSum % 10) + '0';
}
else
{
cNeedCarry = 0;
pRet[iMax - 1] = iTmpSum + '0';
}

--iMax;
--iLenA;
--iLenB;
}

if(cNeedCarry)
{
for (iMax = strlen(pRet); iMax > 0; --iMax)
{
pRet[iMax + 1] = pRet[iMax];
}

pRet[0] = '1';
}

return 0;
}

int main(int argc, char *argv[])
{
char cRet[MAX_LEN + 1] = {0};
char cNumA[MAX_LEN] = {0};
char cNumB[MAX_LEN] = {0};
int	 iRetLen = 0;
printf("Please input number A:\n");
scanf("%s", cNumA);
printf("Please input number B:\n");
scanf("%s", cNumB);

CalcBigNumberAdd(cNumA, cNumB, cRet);
iRetLen = strlen(cRet) + 5;
printf("\n%*s\n%*c\n%*s\n%*.*s\n%*s\n",
iRetLen, cNumA,
iRetLen - 1, '+',
iRetLen, cNumB,
iRetLen, iRetLen, "------------",
iRetLen, cRet);

return 0;
}

测试结果:



 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C 大数相加