大数相加算法的实现
来源:互联网 发布:学唇语 唇唇欲动软件 编辑:程序博客网 时间:2024/06/01 08:41
看到一个帖子,说到大数相加的问题。实现一个代码,贴在这里。
#include <iostream>
#include <string>
#include <stack>
using namespace std;
typedef stack<int> _NumStack;
//大数相加的封装函数
bool AddNum(const string strInput1,const string strInput2, _NumStack &stackResult);
//两数相加的第一部分:即将两个大数相同位数进行相加
bool AddFirst(const string strInput1,const string strInput2,int &nCarry, _NumStack &stackResult);
//两数相加的第二部分
bool AddSecond(const string strInput,int nCarry,int nStart,_NumStack &stackResult);
int main(int argc,char **argv)
{
string strInput1;
string strInput2;
cout<<"Please Input Your Num!\n";
while(cin>>strInput1>>strInput2)
{
_NumStack stackResult;
if(!AddNum(strInput1,strInput2,stackResult))
break;
//输出结果
if(!stackResult.empty())
{
cout<<"Result:\t";
for(int i = stackResult.size();i>0; i--)
{
cout<<stackResult.top();
stackResult.pop();
}
}
}
return 0;
}
bool AddNum(const string strInput1,const string strInput2, _NumStack &stackResult)
{
if(strInput1.empty() || strInput2.empty())
return false;
int nCarry = 0; //进位标识
if(AddFirst(strInput1,strInput2,nCarry,stackResult))
{
int nLen1 = strInput1.size() - 1;
int nLen2 = strInput2.size() - 1;
if(nLen1 == nLen2)
return true;
return nLen1 > nLen2 ? AddSecond(strInput1,nCarry,nLen1-nLen2,stackResult) : AddSecond(strInput2,nCarry,nLen2 - nLen1,stackResult);
}
return false;
}
bool AddFirst(const string strInput1,const string strInput2,int &nCarry, _NumStack &stackResult)
{
if(strInput1.empty() || strInput2.empty())
return false;
int nLen1 = strInput1.size() - 1;
int nLen2 = strInput2.size() - 1;
for(;nLen1 >= 0 && nLen2 >= 0; nLen1--,nLen2--)
{
int nTemp = strInput1[nLen1] - '0' + strInput2[nLen2] - '0' + nCarry;
nCarry = nTemp < 10 ? 0 : 1;
if(nCarry)
nTemp %= 10;
stackResult.push(nTemp);
}
return true;
}
bool AddSecond(const string strInput,int nCarry,int nStart,_NumStack &stackResult)
{
if(strInput.empty())
return false;
for(; nStart >= 0; nStart --)
{
int nTemp = strInput[nStart] - '0' + nCarry;
nCarry = nTemp < 10 ? 0 : 1;
if(nCarry)
nTemp %= 10;
stackResult.push(nTemp);
}
return true;
}
- 大数相加算法的实现
- 大数相加的简单实现
- 大数相加与相乘算法实现
- 简单的大数相加的实现
- 简单的大数相加的实现
- 大数相加算法
- 大数相加 算法
- 大数相加算法
- 大数相加算法
- 大数相加算法
- 算法--大数相加问题
- 大数相加算法
- 大数相加算法
- 算法大数整数相加
- 大数相加的C++简单实现
- 大数相加(C实现
- java实现大数相加
- 实现两个大数相加
- android 浅复制和深复制-clone篇
- 关于编码,资深大牛写的,通俗易懂
- rootkit技术之IoCallDriver介绍
- cocos2d-x 0.9.2 ccmenu bug
- 名人面谈语录
- 大数相加算法的实现
- Android MediaPlayer基本知识
- gdb的简单使用和gdb+gdbserver方式进行ARM程序调试
- win7中如何添加快速启动栏?
- C语言学习笔记之数据结构篇(一)
- 虚拟机下安装后台开发环境--笔记
- N后问题
- ERP总结系列(ERP的演变)
- DBMS_SPACE包的使用