方法:这里用了数据结构栈,实际上栈更方便实现高精度加法。
步骤:1、第一个数据加数按输入顺序(高位到低位)入栈1。此时栈顶为最低位
2、第二个数据加数按输入顺序(高位到低位)入栈2。此时栈顶为最低位
3、将栈1、栈2均pop出栈顶做加法,并考虑进位,结果入栈3,这时栈3正好是低位入栈。
4、处理多余的栈1、栈2。
5、直接pop出栈3,即正好的从高位到低位的结果。
完整的实现代码如下:
#include "iostream"
#include "stack"
using namespace std;
stack<int>s1;
stack<int>s2;
stack<int>s3;
char c1[100];
char c2[100];
int main(void)
{
printf("请输入第一个加数:");
cin>>c1;
printf("请输入第二个加数:");
cin>>c2;
int len1=strlen(c1);
int len2=strlen(c2);
for(int i=0;i<len1;i++)
{
s1.push(c1[i]-'0'); //按输入顺序(高位到低位)入栈1,此时栈顶为最低位
}
for(int i=0;i<len2;i++)
{
s2.push(c2[i]-'0'); //按输入顺序(高位到低位)入栈2,此时栈顶为最低位
}
int tmp=0;
while(!s1.empty() && !s2.empty())
{
tmp += s1.top()+s2.top(); // 将栈1、栈2均pop出栈顶做加法,并考虑进位,结果入栈3,这时栈3正好是低位入栈
s1.pop();
s2.pop();
s3.push(tmp%10);
tmp = tmp/10;
}
while(!s1.empty()) //处理多余的栈1
{
tmp += s1.top();
s1.pop();
s3.push(tmp%10);
tmp = tmp/10;
}
while(!s2.empty()) //处理多余的栈2
{
tmp += s2.top();
s2.pop();
s3.push(tmp%10);
tmp = tmp/10;
}
if(tmp) //处理多余的进位
{
s3.push(tmp);
}
printf("两个数相加的结果为:");
while(!s3.empty()) //直接pop出栈3,即正好的从高位到低位的结果
{
cout<<s3.top();
s3.pop();
}
cout<<endl;
system("pause");
return 0;
}
#include "iostream"
#include "stack"
using namespace std;
stack<int>s1;
stack<int>s2;
stack<int>s3;
char c1[100];
char c2[100];
int main(void)
{
printf("请输入第一个加数:");
cin>>c1;
printf("请输入第二个加数:");
cin>>c2;
int len1=strlen(c1);
int len2=strlen(c2);
for(int i=0;i<len1;i++)
{
s1.push(c1[i]-'0'); //按输入顺序(高位到低位)入栈1,此时栈顶为最低位
}
for(int i=0;i<len2;i++)
{
s2.push(c2[i]-'0'); //按输入顺序(高位到低位)入栈2,此时栈顶为最低位
}
int tmp=0;
while(!s1.empty() && !s2.empty())
{
tmp += s1.top()+s2.top(); // 将栈1、栈2均pop出栈顶做加法,并考虑进位,结果入栈3,这时栈3正好是低位入栈
s1.pop();
s2.pop();
s3.push(tmp%10);
tmp = tmp/10;
}
while(!s1.empty()) //处理多余的栈1
{
tmp += s1.top();
s1.pop();
s3.push(tmp%10);
tmp = tmp/10;
}
while(!s2.empty()) //处理多余的栈2
{
tmp += s2.top();
s2.pop();
s3.push(tmp%10);
tmp = tmp/10;
}
if(tmp) //处理多余的进位
{
s3.push(tmp);
}
printf("两个数相加的结果为:");
while(!s3.empty()) //直接pop出栈3,即正好的从高位到低位的结果
{
cout<<s3.top();
s3.pop();
}
cout<<endl;
system("pause");
return 0;
}
分享到:
相关推荐
任意长整数加法课件,主要是关于java的整数之间的加法运算代码
任意长的整数加法 问题描述:设计一个程序实现两个任意长的整数的求和运算。 基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,...
数据结构-任意长整数加法.doc
长整数加法的总体目标:在VC6.0的开发环境下,利用所学C语言和数据结构的相关知识,开发一个可实现任意长的整数加法的演示程序,并具有良好的人机交互界面 基本功能如下: (1)设计一个实现任意长的整数加法运算...
问题描述:设计一个程序实现两个任意长的整数的求和运算。...基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000.
利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -(2^15 - 1)~ (2^15 - 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 这是我用java写的,使用...
课程设计 任意长的整数加法 C++ 数据结构
用字符串表示整数,需要多长可以自己定义,函数add模拟手工运算,第一、二个参数为加数和被加数,第三个参数存放和数。主函数main给出了add的用法,计算并输出斐波那契数列的前400项。本文件在LINUX环境下运行正确...
虽然只是数据结构的课后习题,感觉也是个小型课程设计了
任意长的整数加法.exe
每行输入任意个整数,回车后输出这些整数之和。0表示程序结束 可以运行
用C++实现,数据结构课程设计报告。比较完整。
长整数 高精度 计算 整数 正数负数
1. 采用单向链表实现任意长的整数加法, 2. 编写子函数完成从键盘输入整数的功能; (3)编写子函数完成两个整数相加的功能; (4)编写子函数完成输出结果的功能; (5)编写主函数,通过调用以上各子函数完成...
用户输入两个任意长度的数字,程序能够算出二者之和,利用c语言实现了高精度。
使用C++实现的大整数加法,用户可以输入任意位数的两个数字,使用该程序可以计算出其加法结果和减法结果。
十分简易java语言写的超大整数相减程序 水品有限 需要的可以借鉴
数据结构的课程设计,可实现任意长度加减法计算
数据库,课程,实现任意长度长整数操作,包括加法、乘法、简单输出
用汇编语言,实现任意长度数字的加法,,在此基础上可以实现减法等操作。