java实现---两个超长正整数相加

本文介绍了一种用Java实现超长正整数相加的方法,包括详细步骤和解题思路:首先将输入字符串转换为字符数组,然后比较长度,创建新的字符数组存储结果,并进行反向存储以便从低位开始相加。接着,逐位相加并将结果存储到新数组中,考虑到可能的进位问题。最后,根据具体情况反转结果数组并将其转换为字符串输出。附有解题源码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个超长正整数相加

题目描述:

请设计一个算法完成两个超长正整数的加法。借口说明:

输入参数:
        String addend:加数
    	String augend:被加数
    	返回值:加法结果
    	public String AddLongInteger(String addend,String augend){
   
    		/*在这里实现功能*/
    		return null;
    	}
输入描述:
输入两个字符串数字
输出描述:
输出相加后的结果,string型

示例:
输入:
999999999999999999999999999
1
输出:
1000000000000000000000000000
解题思路:

1.首先将输入的两个字符串分别存入两个字符数组(a1和a2)中;

2.比较两个字符数组的长度,开辟一个新的数组(c1)长度为长度较大的字符数组长度+1(原因为若为实例此种情况,最终结果长度加1);

3.新开辟两个char数组(b1和b2)长度分别与a1和a2相同,分别将a1与a2中数据反向存储(原因是a1和a2数组中数据为直接存储,不可直接相加,因按照数学知识加法是从个位开始,但若直接相加则长度较短的数组最高位与长度较长数组最高位同位,结果出现偏差。如:输入 123 12 ,正确结果为135,但若直接相加结果变为243);

4.将b1和b2数组中数据依次相加存储至c1数组中(相加分为两种情况:相同下标下均有元素相加后存储;相同下标下一个有一个没有,直接存入有元素即可);

5.新创建数组c2,目的在于将c1数组反向存储。但一个大前提在于c1最后一个元素是否为0,若为0则c1长度减1后再将其反向存储于c2;若不为0,则直接将其反向存储于c2。

需要将c1反向存储的原因是相加后的结果也为反向的,但结果需正向输出(如输入123 12 被反向存储后为321 21 相加后得到的元素内容为:531 再次将其反转后才为正确结果135)。

判断c1最后一个元素是否为0的原因在于:c1数组开辟时比最长字符数组长度大1,若不考虑是否为0情况直接反转的话,输入123 12时得到的结果是0135,这明显是不符合数学定义的,故我们需要进行判断是否为0。

如输入 123 12 翻转后存储321 21 相加后 531 翻转后最终结果 135

如输入 999 1 翻转后存储999 1 相加后0001 翻转后最终结果 1000

6.最终将c2数组转换为String类型输出即可。

解题源码:
import java.util.Scanner;

public class JavaStudy{
   
    public static void main(String[] args) {
   
        Scanner in=new Scanner(System.in);
        //保证不断输入
        while (in.hasNext()){
   
            String addend=in.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值