您的位置:首页 > 其它

高精度大整数加法

2011-10-05 11:31 225 查看
今天偶然在逛网页时,发现了这题。之前在算法书上也有看到,不过还是觉得这个解法更简单,易于理解。附上代码,大家多多交流。O(∩_∩)O哈哈~

此方法采用栈的结构来存储加数(栈1、栈2)和结果(栈3)。

1.用字符数组存储输入的加数,一位位存入栈(栈1、栈2)中,这样栈顶元素是最低位。

2.将两个栈(栈1、栈2)元素出栈相加,结果存入栈3中,并保存进位。(此时,栈3的栈顶元素为最高位)

3.处理栈1、栈2中剩下的元素。

4.栈3出栈,输出结果

高精度大整数加法

#include <iostream>
#include <stack>
using namespace std;

stack<int>s1;
stack<int>s2;
stack<int>s3;
char c1[100];
char c2[100];

void LargeIntAdd()
{
int len1 = strlen(c1);
int len2 = strlen(c2);
int i;
for(i=0;i<len1;i++)
{
s1.push(c2[i]-'0');                //将输入的数据(高位到低位)存入s1栈中,此时栈顶为最低位
}

for(i=0;i<len2;i++)
{
s2.push(c2[i]-'0');                //将输入的数据(高位到低位)存入s2栈中,此时栈顶为最低位
}

int tmp = 0;
while(!s1.empty() && !s2.empty() )   //若两个栈都不为空
{
//将栈1、栈2均pop出栈做加法,并考虑进位,结果入栈3,这时栈3正好是低位入栈
tmp += s1.top()+s2.top();
s1.pop();
s2.pop();
s3.push(tmp%10);
tmp=tmp/10;
}
while(!s1.empty())       //s1栈不为空
{
tmp += s1.top();
s1.pop();
s3.push(tmp%10);
tmp=tmp/10;
}
while(!s2.empty())       //s2栈不为空
{
tmp += s2.top();
s2.pop();
s3.push(tmp%10);
tmp=tmp/10;
}
if(tmp)                //若进位不为0,入栈
{
s3.push(tmp);
}
while(!s3.empty())     //最终的结果(栈顶为最高位)输出
{
cout<<s3.top();
s3.pop();
}
cout<<endl;

}
int main()
{
cout<<"请输入第一个数:";
cin>>c1;
cout<<"请输入第二个数:";
cin>>c2;
cout<<"输出最终结果是:";
LargeIntAdd();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: