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;}
测试结果:
- C语言两个以字符串形式出现的超级大数相加
- 两个大数相加 C语言
- C语言大数相加
- c语言 大数相加
- C语言大数相加
- C语言---大数相加
- C语言以字符串的形式读写文件
- 124 C语言以字符串的形式读写文件
- C实现两个大数相加
- 大数字符串形式相加和相乘
- 【C++】两个字符串相加
- 大数相加(C语言)
- C语言之大数相加
- C语言 ☞ 大数相加
- 接受a,b 两个16进制字符串,返回相加的和,以16进制字符串形式保存在*a中
- 大数相加,两个大数。
- C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
- C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现
- 大型架构.net平台篇(WEB层均衡负载nginx)
- VS2010 检查内存泄露的方法
- Hibernate自动创建表
- java:path和classpath;jdk与jre;protected与default(又称friendly)
- DirectShow一些流程
- C语言两个以字符串形式出现的超级大数相加
- 排序算法实现及分析
- release版本崩溃,如何定位代码行
- 字符串转换为整数
- Visual Studio打包(Windows Installer),你不知道的RemovePreviousVersions 属性
- VS2010 对话框添加菜单
- Regex 小试
- WinDbg !locks 不可用的问题
- java 线程的暂停与开始