【牛客网】超长正整数相加

一、题目描述:

请设计一个算法完成两个超长正整数的加法。

接口说明:
public String AddLongInteger(String addend, String augend)
{
/在这里实现功能/

return null;
}

输入描述:

输入两个字符串数字

输出描述:

输出相加后的结果,string型

示例1

输入
99999999999999999999999999999999999999999999999999
1
输出
100000000000000000000000000000000000000000000000000

链接:https://www.nowcoder.com/questionTerminal/5821836e0ec140c1aa29510fd05f45fc
来源:牛客网

二:代码描述:
方法一:字符数组+StringBuffer+进位标志位
import java.util.*;
public class ExtraLongPositiveIntegerAddition {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String s1 = sc.nextLine();
            String s2 = sc.nextLine();
            System.out.println(StringAddLongInteger(s1, s2));
        }
    }

    public static String StringAddLongInteger(String addend, String augend) {
        int ret = 0;
        StringBuffer sb = new StringBuffer();
        char[] arr1 = addend.toCharArray();
        char[] arr2 = augend.toCharArray();
        int length1 = arr1.length - 1;
        int length2 = arr2.length - 1;
        while (length1 >= 0 || length2 >= 0 || ret != 0) {
            if (length1 >= 0) {
                ret += arr1[length1] - '0';
                length1 -= 1;
            }
            if (length2 >= 0) {
                ret += arr2[length2] - '0';
                length2 -= 1;
            }
            sb.append(ret % 10);
            ret /= 10;
        }
        sb.reverse();
        return sb.toString();
    }
}
方法二:使用BigInteger类
  • 构造器BigInger(String val),可以直接将十进制字符串表示形式转换为大整数。
  • 大整数相加:add(BigInteger val) 方法,返回值为 (this + val)。
import java.math.BigInteger;
import java.util.*;
class ExtraLongPositiveIntegerAddition2{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String s1=sc.nextLine();
            String s2=sc.nextLine();
            BigInteger num1=new BigInteger(s1);
            BigInteger num2=new BigInteger(s2);
            System.out.println(num1.add(num2));
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值