大整数加法java_JAVA 大整数加法的实现

大整数加法java_JAVA 大整数加法的实现整数加法 paramlv 左值 paramrv 右值 paramresult 相加的结果 数值存放说明数值的每一位作为栈的一项存放在栈中 从栈底到栈顶依次是数值的高位到低位 算法描述输入的加数倒序存放在栈中 即栈顶是数的最低位 栈底是数的最高位 计算的时候 依次弹出栈中的数据 对每

/

* 整数加法

*

* @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/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228533.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午6:48
下一篇 2026年3月16日 下午6:48


相关推荐

  • MCS:多元随机变量——多项式分布

    MCS:多元随机变量——多项式分布二项分布的典型例子是扔硬币 把二项分布公式推广至多种状态 就得到了多项分布 比如扔骰子

    2026年3月17日
    2
  • Metricbeat源码分析

    Metricbeat源码分析0X00 版本信息 Golang 1 16 8Metricbeat 7 140X01Metric 介绍 Metricbeatqu installation MetricbeatRe 7 14 Elastichttps www elastic co guide en beats metricbeat 7 14 metricbeat installation configuratio htmlMe

    2026年3月19日
    9
  • Dart sdk 安装

    Dart sdk 安装DartSDK安装1、下载DartSDK安装包DartSDK安装包网址:https://gekorm.com/dart-windows/其中有两个可选择项,一个是稳定版本一个是最新的版本,二者选其一我们选择稳定的版本即stable版本下载完成并点击运行安装中点击finish,安装完成2、在控制台中检验是否安装成功若出现版本号则安装成功…

    2025年7月10日
    8
  • Java解析XML文件的四种方法「建议收藏」

    Java解析XML文件的四种方法「建议收藏」【摘要】可扩展标志语言(XML)在实现信息标准化、信息的交流与共享上有其独特的技术优势,因此受到了广泛的重视。本文先简单的介绍了XML基本知识,然后从XML应用入手总结了四种现今最常见的XML的解析方法,介绍了这四种方法的特点,其中包括优点与不足之处。最后给出了一个简单的案例来对这四种解析进行代码介绍。【关键字】XML文件,DOM,SAX,JDOM,DOM4J【引言】XML即可扩展标记语

    2022年6月3日
    47
  • 网页木马是什么原理啊_浏览器中了木马怎么办

    网页木马是什么原理啊_浏览器中了木马怎么办网页挂马的实质是利用漏洞向用户传播木马下载器,当我们更清楚了这点就能做到有效的防范。网页木马就是网页恶意软件威胁的罪魁祸首,和大家印象中的不同,准确的说,网页木马并不是木马程序,而应该称为网页木马“种植器”,也即一种通过攻击浏览器或浏览器外挂程序(目标通常是IE浏览器和ActiveX程序)的漏洞,向目标用户机器植入木马、病毒、密码盗取等恶意程序的手段首先明确,网页木马实际上是一个HTML网页,与其

    2025年6月23日
    4
  • 数学学习资料汇总[可运行源码]

    数学学习资料汇总[可运行源码]

    2026年3月12日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号