大数A+B

大整数加法(A+B高精度) 求两个不超过200200位的非负整数的和。 输入格式 有两行,每行是一个不超过200200位的非负整数,可能有多余的前导00。 输出格式 一行,即相加后的结果。结果里不能有多余的前导00,即如果结果是342342,那么就不能输出为03420342。 Sample 1 Inputcopy Outputcopy 22222222222222222222 33333333333333333333 55555555555555555555 ... 阅读详情

给出2个大整数A,B,计算A+B的结果。


Input

第1行:大数A
第2行:大数B
(A,B的长度 <= 10000 需注意:A B有可能为负数)

Output

输出A + B

Input示例
68932147586
468711654886
Output示例
537643802472

解法1
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        String a=reader.readLine();
        String b=reader.readLine();
        System.out.println(new BigInteger(a).add(new BigInteger(b)));
    }
}

直接用Java大数类处理,比较无赖。

解法2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String A = reader.readLine();
        String B = reader.readLine();
        if (A.trim().equals(B.trim())) {
            System.out.println(0);
        } else {
            add(A, B);
        }
    }

    static void add(String A, String B) {
        //提取符号作判断
        char signA = A.charAt(0);
        char signB = B.charAt(0);

        //运算对象,反转易于计算
        if (signA == '-') A = A.substring(1);
        if (signB == '-') B = B.substring(1);
        char[] numA = new StringBuilder(A).reverse().toString().toCharArray();
        char[] numB = new StringBuilder(B).reverse().toString().toCharArray();

        //结果集
        int[] result = new int[A.length() > B.length() ? A.length() + 1 : B.length() + 1];

        //两者都为正数或两者都为负数
        if ((signA != '-' && signB != '-') || (signA == '-' && signB == '-')) {
            for (int i = 0; i < result.length; i++) {
                //模拟竖式相加,先不考虑进位,为了避免numA数组或numB数组下标溢出,这里需要先判定i是否超过数组下标
                result[i] = i < numA.length ? numA[i] - '0' : 0;
                result[i] += i < numB.length ? numB[i] - '0' : 0;
            }
            //进位处理
            for (int i = 0; i < result.length; i++) {
                if (result[i] >= 10) {
                    result[i + 1] += 1;
                    result[i] = result[i] % 10;
                }
            }
            //输出,要注意对第一位可能为0的处理
            StringBuilder sb = new StringBuilder();
            int i = result.length - 1;
            if (result[i] == 0) i--;
            for (; i >= 0; i--) {
                sb.append(result[i]);
            }
            //如果两者为负数需要添加负号
            if (signA != '-' && signB != '-') {
                System.out.println(sb.toString());
            } else {
                System.out.println(sb.insert(0, '-').toString());
            }
        }

        //若A为负数,B为正数
        if (signA == '-' && signB != '-') {
            exchange(numA, numB);
        }
        //若A为正数,B为负数
        if (signA != '-' && signB == '-') {
            exchange(numB, numA);
        }
    }

    /**
     * @param [numA, numB]
     * @return void
     * @descript 绝对值大小比较
     **/
    static void exchange(char[] numA, char[] numB) {
        if (numA.length > numB.length) {
            System.out.println("-" + minus(numA, numB));
        } else if (numA.length < numB.length) {
            System.out.println(minus(numB, numA));
        } else if (numA.length == numB.length) {
            int i = numA.length - 1;
            for (; i >= 0; i--) {
                if (numA[i] - numB[i] > 0) {
                    System.out.println("-" + minus(numA, numB));
                    break;
                } else if (numA[i] - numB[i] < 0) {
                    System.out.println(minus(numB, numA));
                    break;
                }
            }
        }
    }

    /**
     * @param [minuend 被减数, subtrahend 减数]
     * @return void
     * @descript 返回绝对值之差
     **/
    static String minus(char[] minuend, char[] subtrahend) {
        int[] result = new int[minuend.length];
        StringBuilder sb = new StringBuilder();
        //不考虑借位,作相减操作
        for (int i = 0; i < minuend.length; i++) {
            result[i] = i < subtrahend.length ? minuend[i] - subtrahend[i] : minuend[i] - '0';
        }
        //借位处理
        for (int i = 0; i < result.length - 1; i++) {
            if (result[i] < 0) {
                result[i] += 10;
                result[i + 1] -= 1;
            }
        }
        //处理高位为零的情况并拼接结果
        boolean over = false;
        for (int i = result.length - 1; i >= 0; i--) {
            if (result[i] == 0 && !over) {
                continue;
            }else{
                sb.append(result[i]);
                over=true;
            }
        }
        return sb.toString();
    }
}
A+B进阶——大数加法算法 A+B 进阶版 Description 输入为两个整数 A B请输出A+B Input 两个数字以空格分割,如1234567 1111111 Output 输入的两个数的和 Sample Input 1 :1234567 1111111 Sample Output 1:2345678 法一:java实现 java系统类库已经内置了Math.BigInteger类,直接调用就可以很轻易地解决 im... 阅读详情

相关推荐

A+B Problem II——大数定理

A+B Problem II 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. A,B must be positive. 输入

来自师范的学渣 9178

大数相加(A+B)(超详细)!

大数相加

xuecde的博客 6415

【hpuoj】大数A+B

1163: 大数A + B [字符串] 时间限制: 1 Sec  内存限制: 128 MB 提交: 42  解决: 12 [提交][状态][讨论版] 题目描述 给定两个整数AA和BB,让你求出A+BA+B的值。 输入 第一行输入一个整数TT,代表有TT组测试数据。 每组数据占两行,第一行输入一个整数AA,第二行输入一个整数BB。 注:1=T=30,1=A,B=10

苏草合的博客 619

大数加法A+B

题号:1002 题意: 我有一个非常简单的问题要告诉你。给定两个整数 A 和 B,您的工作是计算 A + B 的总和。‎ Input: 输入的第一行包含一个整数 T(1<=T<=20),这意味着测试用例的数量。然后T线跟随,每行由两个正整数A和B组成。 请注意,整数非常大,这意味着你不应该使用32位整数来处理它们。您可以假定每个整数的长度不会超过 1000。 ‎Output: 对于每个...

qq_43160240的博客 985

牛客网 a+b (大数加法)

题目描述 实现一个加法器,使其能够输出a+b的值。 输入描述: 输入包括两个数a和b,其中a和b的位数不超过1000位。 输出描述: 可能有多组测试数据,对于每组数据, 输出a+b的值。 示例1 输入 2 6 10000000000000000000 10000000000000000000000000000000 输出 8 10000000000010000000000000000000 Sol...

sunlanchang的博客 2120

ACM 大数 A+B Problem

原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=513 描述:              acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这个问题给解决了。 在编程中遇到的问题:              在输出结果的过程中一直出现错误,因为在该过程中需要去掉一些无效的0,比如小数部分最后面的

于沛杰的博客 1239

PTA 7-261 大整数A+B

PTA 7-261 大整数A+B

higgins_li的博客 3440

大数加法(高精度)A+B题解

我又回来啦 这道题会用到大数加法与大数减法,但是要考虑负数的情况 情况 处理方法 两个数都是正数 正常相加 两个数都是负数 在两个数绝对值相加的结果前加上一个‘-’ 第一个是负数,另一个是正数 比较其绝对值,如果第一个的绝对值大于第二个的,那么就输出第一个数的绝对值减去第二个数的绝对值再在前面加一个‘-’,否则输出第二个数的绝对值减第一个数的绝对值 第一个是正数,另一个是负数 比较其绝对值,如果第一个的绝对值大于第二个的,那么就输出第一个数的绝对值减去第二个数的绝对值,否则输出第

m0_45379852的博客 384

A + B Problem II大数A+B

I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. Input The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consis

准备23考研。不定期更新考研知识 429

大数加法 A+B Problem(高精)

题目描述 高精度加法,相当于a+b problem,不用考虑负数. 输入格式 分两行输入。a,b<=10^500 输出格式 输出只有一行,代表a+b的值 输入输出样例 输入 1 1 输出 2 输入 1001 9099 输出 10100 #include<bits/stdc++.h> using namespace std; #define ll long long void Add(char a[],char b[]) { int x[105],y[105],sum[105];

不就是睡觉吗的博客 323

保姆级教程:用Jetson Orin Nano和ROS2 Humble搞定PIXhawk 4飞控通信(含配置文件详解)

本文提供了一份详细的Jetson Orin Nano与PIXhawk 4飞控通信配置指南,涵盖硬件连接、ROS2 Humble环境搭建、MAVROS2配置及通信调试全流程。通过实战案例和配置文件详解,帮助开发者快速实现无人机上位机与飞控的稳定通信,适用于无人机开发与自动化控制场景。

weixin_33670786的博客 475

A-B Problem 大数相等

原文链接: A-B Problem 大数相等 上一篇...

阿豪 105

从零开始:Ubuntu 24.04 LTS + Win11双系统安装教程

本文将简单直白介绍如何从零开始在同一台电脑上安装 Ubuntu 24.04 LTS 和 Windows 11,你可以在需要进行专业开发或运维工作时,轻松切换到 Ubuntu,享受其带来的高效与自由;而在日常学习生活和娱乐休闲时,依然可以无缝使用熟悉的 Windows 环境。

萑澈的博客 8103

A+B Problem II 大数加法

原文链接: A+B Problem II 大数加法 ...

阿豪 106

深度解析中国支付清算体系

说起国之重器,不仅仅有 东风快递、渔16、渔17、渔18,还有另外一个国之重器-CNAPS2(中国支付清算体系)。 中国国内支付行业的发达水平、繁荣程度,不客气的讲,在全世界都是数一数二的,世界上最大的银行卡组织银联在中国,世界上交易量最大的网络零售支付清算体网联在中国。可以说现在我国经济的高速发展,离不开CNAPS2。

银行信息系统应用架构详解 2508

【Out-of-Distribution Detection】Evidential Deep Learning in NeurIPS 2018 个人理解

核心思想是将分类器的概率输出视为一个狄利克雷分布(Dirichlet Distribution)并替换,之后引入两个损失分别负责保证预测结果准确性和提升被错误分类的样本的不确定性。

研究兴趣:开放集识别、开放世界识别、新类发现、增量学习、少样本学习 2433

A+B大数问题

高精度加法,相当于a+b problem,不用考虑负数.

北北北 497

Light Tools 8.4 在 win10系统上的安装方法(64位)

** 总的来说安装LT需要以下步骤(折腾了三天终于装好): 安装LT软件–禁用签名–加载含数字签名的第三方inf–添加注册表/安装驱动/添加密钥–成功破解 一、下载对应的LightTools 8.4版本软件,如下图为解压后的文件: 并选择 进行默认安装。 二、禁用数字签名。这里我用了两种方法,一种不行就换另一种,最终成功禁用。 方法1: 1、输入“cmd”并以管理员身份运行; 2、输入或复制 bcdedit.exe /set nointegritychecks on (此命令若没成功,再试bcded

weixin_45560953的博客 1万+

大数A+B问题

原理         大数运算的原理其实就是模拟人工计算(注记:再考虑是否有其他算法。注记日期:2017.3.19),人工加法计算步骤如下:     1.将两个操作数(operand)位数对齐。     2.从最低位开始,计算两个操作数每位的总和再加上进位数(第一位数为0)的结果,保留其个位数。     3.若上述的结果大于10,进位数置为1,否则为0。(每位数相加的结果不

NSSWTT的博客 1861

【雕爷学编程】Arduino动手做(111)---震动提醒模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。

雕爷学编程 1898

YOLO26优化:原创自研 | 自研独家创新DSAM注意力 ,基于BiLevelRoutingAttention注意力升级

提出新颖的注意力DSAM(Deformable Bi-level SpatialAttention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的Deformable Bi-level Attention+Spartial Attention

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 362

SDNUOJ——1303.A+B(高精度-大数相加)

Description 求A+B Input 多组测试样例。两个正整数X,Y(0≤X,Y≤10^100) Output 输出结果 Sample Input 1 1 12345 54321 Sample Output 2 66666 #include<stdio.h> #include<iostream> #include<map> #include<alg...

浦柳人的博客 294

linux 基于debian/ubuntu AB系统适配(二)-updateEngine移植

其实A/B系统的原理很简单,大部分的工作都集中在uboot上,rootfs只是起到一个辅助的作用,但这个作用也就必不可少的。你会发现在这个其中并没有kernel的参与。

badbayyj的博客 1033

hdu 1002 A+B 2大数相加

hdu 1002 A+B 2大数相加 1.注意输入直接用字符串输入; 2.注意看清题目; 3.特别小心自增自减的使用,避免使用到不合理的值; 4.利用测试不断优化程序。 #include<iostream> using namespace std; int main() { int n; char m[1005], p[1005]; cin >> n; for (int i = 0; i < n; i++) { cin >> m >>

weixin_44053718的博客 143

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

2035: A-B Problem 大数相减

2035: A-B Problem 时间限制: 1 Sec内存限制: 64 MB 提交: 30解决: 14您该题的状态:已完成 [提交][状态][讨论版] 题目描述 A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧。 现在有两个实数A和B,聪明的你,能不能判断出A-B的值是否等于0呢? 输入 有多组测试数据。每组数据包括两行,分别代表A和B。 它们的位数...

小渣渣的博客 255

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

1017 A除以B (20 分)——大数计算

1017 A除以B (20 分)——大数计算 本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。 输入格式: 输入在一行中依次给出 A 和 B,中间以 1 空格分隔。 输出格式: 在一行中依次输出 Q 和 R,中间以 1 空格分隔。 输入样例: 123456789050987654321 7 输出样例:...

私念的博客 265

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: VirtualBox配置 NAT+Host Only网络
下一篇: UUID压缩
HamalAlpha
博客等级 码龄11年 5粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值