大数相加

https://blog.csdn.net/xujunabc999/article/details/47374303

https://www.cnblogs.com/maydow/p/4782482.html

解法1:使用java自带的BigDecimal类

复制代码
import java.math.BigDecimal;
import java.util.Scanner;

public class test1 {

    public static void main(String[] args) {
        String s1="123456789123456789";
        String s2="123456789123456789";
        BigDecimal bigDecimal=new BigDecimal(s1);
        BigDecimal bigDecimal1=new BigDecimal(s2);
        BigDecimal add = bigDecimal.add(bigDecimal1);
        System.out.println(add);
    }
}
复制代码

 

解法2:

  按照正常的加法运算,相加进位的方式。使用StringBuilder存储我们相加的结果。

复制代码
import java.math.BigDecimal;
import java.util.Scanner;


public class test1 {
    public static void main(String[] args) {
        String t1 = "123456789123456789";
        String t2 = "123456789123456789";
        System.out.println(getStr(t1, t2));
    }

    public static String getStr(String a, String b) {
        int l = a.length();
        int s = b.length();
        String longString = l > s ? a : b;
        String shortString = l <= s ? a : b;
        l = longString.length();
        s = shortString.length();
        longString = new StringBuilder(longString).reverse().toString();
        shortString = new StringBuilder(shortString).reverse().toString();
        StringBuilder stringBuilder = new StringBuilder();
        boolean carry = false;
        for (int i = 0; i < s; i++) {
            char cl = longString.charAt(i);
            char cs = shortString.charAt(i);
            int il = cl - '0';
            int is = cs - '0';
            int nx = il + is + (carry ? 1 : 0);
            if (nx > 9) {
                carry = true;
                stringBuilder.append((char) ('0' + nx - 10));
            } else {
                carry = false;
                stringBuilder.append((char) ('0' + nx));
            }
        }
        if (s == l && carry) {
            stringBuilder.append('1');
            return stringBuilder.toString();
        }
        String str = longString.substring(s, l);
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            int nx = c - '0' + (carry ? 1 : 0);
            if (nx > 9) {
                carry = true;
                stringBuilder.append((char) ('0' + nx - 10));
            } else {
                carry = false;
                stringBuilder.append((char) ('0' + nx));
            }
        }
        if (carry)
            stringBuilder.append('1');
        return stringBuilder.reverse().toString();
    }
}
复制代码

 

posted @   guoyu1  阅读(120)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示