/**

* 整数加法

*

* @param lv

* 左值

* @param rv

* 右值

* @param result

* 相加的结果

* @数值存放说明 数值的每一位作为栈的一项存放在栈中,从栈底到栈顶依次是数值的高位到低位

* @算法描述 输入的加数倒序存放在栈中(即栈顶是数的最低位,栈底是数的最高位)。 计算的时候,依次弹出栈中的数据,对每一位执行加操作。

* 若遇到进位,则将进位标志carry设置为1,以在进行下一位计算的时候将其加上。 进位加结束后,将carry的值重置为0。

* 每次计算都会检查进位标志carry的值

*/

void plus(Stacklv, Stackrv, Stackresult) {

int sum = 0;

// 进位标志

int carry = 0;

while (true) {

try {

// 两个加数的长度都还不为0,继续分别在两个栈中取出一位相加

if (!lv.empty() && !rv.empty()) {

// 两个加数取出一位值相加,再加上进位(因为在有进位时carry=1,无进位时carry=0,根据任何数与0相加都等于0,所以可以直接加上)

sum = lv.pop() + rv.pop() + carry;

// 进位标志使用后,重置为0

carry = 0;

// 根据当前加数的和再加上进位的结果是否大于9(即10甚至更大,因为每一位加数的最大值只可能是9,所以这里最大也只能是18)

// 进行是否进位的判断依据,若大于9,将当前位相加的结果减去10,并将进位标志设置为1

if (sum > 9) {

sum -= 10;

carry = 1;

}

result.push(sum);

// 在两个加数的每一位都进行了计算后,判断是否还有进位,若有则加到结果的最高位

// 为了在两个加数位数(长度)不相等时能正确地计算,这个条件必需放在下面的两个条件前面

} else if (lv.empty() && rv.empty()) {

if (carry == 1)

result.push(carry);

return;

// 左值已经为空(每一位都参与了计算),而右值还不为空时,将右值的每一位取出加上进位值放到结果中

} else if (lv.empty()) {

sum = rv.pop() + carry;

carry = 0;

if (sum > 9) {

sum -= 10;

carry = 1;

}

result.push(sum);

// 同上面左值说明

} else if (rv.empty()) {

sum = lv.pop() + carry;

carry = 0;

if (sum > 9) {

sum -= 10;

carry = 1;

}

result.push(sum);

}

} catch (Exception e) {

System.err.println("栈溢出");

}

}

}

栈的方式实现,主要注意进位的处理。

转载地址:http://www.cnblogs.com/hyjiacan/archive/2012/02/15/large-integer-plus.html

大数值的加法,还可以通过数组的模式实现,原理跟栈的方式差不多,参考地址:http://blog.csdn.net/huberjobs/article/details/51036505

大整数加法java_JAVA 大整数加法的实现相关推荐

  1. 大整数加法(简单算法)

    大整数加法首先要了解加法的算法,具体思路很简单: 从低位到高位开始加,需要进位,正向数组是高位在前,所以需要反向数组开始加法. 代码如下,写的麻烦了一点: #include<stdio.h> ...

  2. Bailian2981 大整数加法【大数】(POJ NOI0106-10)

    问题链接:POJ NOI0106-10 大整数加法. 大整数加法 描述 求两个不超过200位的非负整数的和. 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0. 输出 一行,即相加 ...

  3. 剑指offer第12题打印从1到n位数以及大整数加法乘法

    字符和数字加减就是字符的ASCII码和数字直接加减. 方法一: 1)在字符串操作中给一个整形数字加(字符0)就是把它转化为字符,当然给一个字符减去(字符0)就可以把它转化为数字了:如果确实是最后一位字 ...

  4. 大整数加法基本思路和代码(C++实现)

    大整数加法基本思路和代码(C++实现) 前言 分析 编程 前言 如果给出两个很大很大的整数,这两个数大到long类型也装不下,比如100位整数,如何求它们的和呢? Java中有无敌的BigIntege ...

  5. 大整数加法(详细讲解C++)

    小白的自我成长之路 1. 整数运算 C语言的整数类型往往无法支持过大的数字加法计算. 在C++中实现大数据的运算,则需要借助其他方法(数据类型)实现.在实际操作当中使用数组或者vector容器进行储存 ...

  6. 大整数加法计算思路与算法实现

    参加MOOC PKU的程序设计专项课程学习,目前进度到C++.这门课太烂了,完全就是自学,作业还相当难!!!!比如这里week4的这题,其实是把poj上的大整数的加.减.乘.除合并到一题里面,这个代码 ...

  7. javascript乘法和加法_js 大整数加法、乘法、除法

    有一定的编程经验的人都知道,当我们对数据操作的时候,若数据过大,计算机将这个大数从十进制的转为二进制的,是没有那个类型的放的了的,因此,我们经常将一个大数转化为字符串来操作.接下来我将演示大整数的加法 ...

  8. 1168:大整数加法--2022.01.22 AC

    /* 1168:大整数加法--2022.01.22 AC http://ybt.ssoier.cn:8088/problem_show.php?pid=1168c++中 cin.cin.get().c ...

  9. 信息学奥赛一本通 1168:大整数加法 | OpenJudge NOI 1.6 10:大整数加法

    [题目链接] ybt 1168:大整数加法 OpenJudge NOI 1.6 10:大整数加法 [题目考点] 1. 高精度 考察:高精加高精 高精度计算讲解 [解题思路] 注意:输入可能有多余的前导 ...

最新文章

  1. 基于Numpy构建全连接前馈神经网络进行手写数字识别
  2. 某油企产成品标准成本估算逻辑
  3. Python 技术篇-用paramiko库实现winodws本地文件上传至linux服务器实例演示
  4. 程序员面试宝典(Java)Beta6.0免费下载
  5. C语言深度剖析书籍学习记录 第五章 内存管理
  6. 汇编指令mrs_专题1:电子工程师 之 软件】 之 【8.arm指令】
  7. MySQL binlog_error_action分析
  8. 代理ip怎么使用_爬虫如何使用代理ip解决封禁?
  9. Swarm搭建Docker集群
  10. loj10131 暗的连锁
  11. 基于RFID的图书馆管理
  12. 测绘摄影测量与遥感乙级资质申请流程及具体要求
  13. html如何实现文章分类功能,HTML文本自动分类技术的研究与工具的实现
  14. 通过拖拽改变图片大小
  15. 让logo设计更有设计感的几个方法
  16. Pycharm安装打包工具
  17. mysql par文件_mysql .par文件格式解析
  18. 内网渗透-cs之模拟钓鱼攻击
  19. PHP反射(ReflectionClass、ReflectionMethod)
  20. 爱普生晶振最新现货库存表【加科电子】

热门文章

  1. 转载:Unity3D游戏如何加快冷启动时间
  2. python反弹shell_反弹shell的几种方式总结
  3. SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“. SLF4J: Defaulting to no-operation (
  4. Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines 论文研读
  5. 北京奥运金牌榜珍藏(中国-51金及照片)
  6. Git的使用:本地有新改动如何提交到远程服务器,仅做参考!
  7. 表的创建和删除及数据类型
  8. 有关WCHAR(转)
  9. java多线程分批调用接口
  10. Android应用免费推广策略之普遍推广策略