大整数加法java_JAVA 大整数加法的实现
/**
* 整数加法
*
* @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 大整数加法的实现相关推荐
- 大整数加法(简单算法)
大整数加法首先要了解加法的算法,具体思路很简单: 从低位到高位开始加,需要进位,正向数组是高位在前,所以需要反向数组开始加法. 代码如下,写的麻烦了一点: #include<stdio.h> ...
- Bailian2981 大整数加法【大数】(POJ NOI0106-10)
问题链接:POJ NOI0106-10 大整数加法. 大整数加法 描述 求两个不超过200位的非负整数的和. 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0. 输出 一行,即相加 ...
- 剑指offer第12题打印从1到n位数以及大整数加法乘法
字符和数字加减就是字符的ASCII码和数字直接加减. 方法一: 1)在字符串操作中给一个整形数字加(字符0)就是把它转化为字符,当然给一个字符减去(字符0)就可以把它转化为数字了:如果确实是最后一位字 ...
- 大整数加法基本思路和代码(C++实现)
大整数加法基本思路和代码(C++实现) 前言 分析 编程 前言 如果给出两个很大很大的整数,这两个数大到long类型也装不下,比如100位整数,如何求它们的和呢? Java中有无敌的BigIntege ...
- 大整数加法(详细讲解C++)
小白的自我成长之路 1. 整数运算 C语言的整数类型往往无法支持过大的数字加法计算. 在C++中实现大数据的运算,则需要借助其他方法(数据类型)实现.在实际操作当中使用数组或者vector容器进行储存 ...
- 大整数加法计算思路与算法实现
参加MOOC PKU的程序设计专项课程学习,目前进度到C++.这门课太烂了,完全就是自学,作业还相当难!!!!比如这里week4的这题,其实是把poj上的大整数的加.减.乘.除合并到一题里面,这个代码 ...
- javascript乘法和加法_js 大整数加法、乘法、除法
有一定的编程经验的人都知道,当我们对数据操作的时候,若数据过大,计算机将这个大数从十进制的转为二进制的,是没有那个类型的放的了的,因此,我们经常将一个大数转化为字符串来操作.接下来我将演示大整数的加法 ...
- 1168:大整数加法--2022.01.22 AC
/* 1168:大整数加法--2022.01.22 AC http://ybt.ssoier.cn:8088/problem_show.php?pid=1168c++中 cin.cin.get().c ...
- 信息学奥赛一本通 1168:大整数加法 | OpenJudge NOI 1.6 10:大整数加法
[题目链接] ybt 1168:大整数加法 OpenJudge NOI 1.6 10:大整数加法 [题目考点] 1. 高精度 考察:高精加高精 高精度计算讲解 [解题思路] 注意:输入可能有多余的前导 ...
最新文章
- 基于Numpy构建全连接前馈神经网络进行手写数字识别
- 某油企产成品标准成本估算逻辑
- Python 技术篇-用paramiko库实现winodws本地文件上传至linux服务器实例演示
- 程序员面试宝典(Java)Beta6.0免费下载
- C语言深度剖析书籍学习记录 第五章 内存管理
- 汇编指令mrs_专题1:电子工程师 之 软件】 之 【8.arm指令】
- MySQL binlog_error_action分析
- 代理ip怎么使用_爬虫如何使用代理ip解决封禁?
- Swarm搭建Docker集群
- loj10131 暗的连锁
- 基于RFID的图书馆管理
- 测绘摄影测量与遥感乙级资质申请流程及具体要求
- html如何实现文章分类功能,HTML文本自动分类技术的研究与工具的实现
- 通过拖拽改变图片大小
- 让logo设计更有设计感的几个方法
- Pycharm安装打包工具
- mysql par文件_mysql .par文件格式解析
- 内网渗透-cs之模拟钓鱼攻击
- PHP反射(ReflectionClass、ReflectionMethod)
- 爱普生晶振最新现货库存表【加科电子】
热门文章
- 转载:Unity3D游戏如何加快冷启动时间
- python反弹shell_反弹shell的几种方式总结
- SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“. SLF4J: Defaulting to no-operation (
- Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines 论文研读
- 北京奥运金牌榜珍藏(中国-51金及照片)
- Git的使用:本地有新改动如何提交到远程服务器,仅做参考!
- 表的创建和删除及数据类型
- 有关WCHAR(转)
- java多线程分批调用接口
- Android应用免费推广策略之普遍推广策略