高精度大整数加法
2011-10-05 11:31
225 查看
今天偶然在逛网页时,发现了这题。之前在算法书上也有看到,不过还是觉得这个解法更简单,易于理解。附上代码,大家多多交流。O(∩_∩)O哈哈~
此方法采用栈的结构来存储加数(栈1、栈2)和结果(栈3)。
1.用字符数组存储输入的加数,一位位存入栈(栈1、栈2)中,这样栈顶元素是最低位。
2.将两个栈(栈1、栈2)元素出栈相加,结果存入栈3中,并保存进位。(此时,栈3的栈顶元素为最高位)
3.处理栈1、栈2中剩下的元素。
4.栈3出栈,输出结果
高精度大整数加法
此方法采用栈的结构来存储加数(栈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; }
相关文章推荐
- c语言高精度大整数加法运算
- 2010年华为上机笔试二(高精度整数加法)
- 高精度 大整数加法
- [编程题]无线OSS-高精度整数加法
- 小程序(十四)高精度整数加法
- 高精度整数加法(大整数加法)
- [原创]10^9进制高精度大整数加法(MMX版本)
- 华为OJ(高精度整数加法)
- 无线OSS-高精度整数加法(加数可以为负数,应实现高精度加减法)
- 高精度整数(包括负数)加法
- 高精度整数加法(大整数加法)
- 汇编源码学习10-子程序调用-高精度整数加法
- 整数大数模拟 高精度加法 高精度减法 高精度乘法 高精度除法 c/c++ java
- 【华为OJ】【039-无线OSS-高精度整数加法】
- 【高精度计算 01】 大整数加法
- 任意长度的高精度大整数加法
- 高精度整数加法
- 任意长度的高精度大整数加法
- 【华为机试】无线OSS-高精度整数加法
- POJ 1504 Adding Reversed Numbers (水题,高精度整数加法)