C语言两个以字符串形式出现的超级大数相加
2013-04-27 16:16
549 查看
任意两个超级大的整数以字符形式出现,如"999999999999999999999",计算它们的和,结果仍以字符串形式输出。
测试结果:
![](https://img-blog.csdn.net/20130427161454915)
#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; }
测试结果:
相关文章推荐
- 两个用大数相加(转化为字符串再相加)
- [置顶] 大数字符串形式相加和相乘
- 两个大数相乘(字符串形式)
- 用字符串模拟两个大数相加——java实现
- 两个大数相加,使用字符串模拟相加过程
- C语言学习序列之面试题目-计算两个字符串中出现的相同英文字符
- 将两个字符串连接。解决了c语言输入出现溢出现象
- 用字符串模拟两个大数相加——java实现
- java实现两个大数相加,可能出现溢出错误
- leetcode_415(两个数字字符串相加,模拟大数相加)
- 用字符串模拟两个大数相加——java实现
- 两个大数相加,使用字符串模拟相加过程
- java机试-用字符串模拟两个大数相加
- 利用C语言实现:输入两个字符串,统计一个字符串在另一个字符串中出现的次数 。
- c语言将字符串中连续出现的空格(两个以上)合并成一个
- 接受a,b 两个16进制字符串,返回相加的和,以16进制字符串形式保存在*a中
- LeetCode425——Add Strings(两个字符串中的数字相加(十进制或二进制),输出字符串形式的结果)
- 两个大数相加,使用字符串模拟相加过程
- C语言:大数相加与大数相减.
- C语言之大数相加