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

来源:互联网 发布:戈洛夫金力量数据 编辑:程序博客网 时间:2024/06/16 12:49

任意两个超级大的整数以字符形式出现,如"999999999999999999999",计算它们的和,结果仍以字符串形式输出。

 

#include <stdio.h>#include <string.h>#define  MAX_LEN 1024int  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;}

测试结果:

 

 

原创粉丝点击