#yyds干货盘点# 解决华为机试:高精度整数加法

Posted 97的风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# 解决华为机试:高精度整数加法相关的知识,希望对你有一定的参考价值。

1.简述:

描述

输入两个用字符串 str 表示的整数,求它们所表示的数之和。

数据范围: 1 \\le len(str) \\le 10000 \\1≤len(str)≤10000 

输入描述:

输入两个字符串。保证字符串只含有0~9字符

输出描述:

输出求和后的结果

示例1

输入:

9876543210
1234567890

复制输出:

11111111100

2.代码实现:

思路:

遍历相加

从两个字符串末尾开始往前遍历每个字符,直到遍历到两个字符串的下标都为0. 将遍历到的字符串转化为数字,如果其中一个字符串已经过了首部,则直接数字记为0.

然后将两个数字与进位变量相加,取余数放入现在这位,整除10作为进位,初始进位变量为0。最后结束之后如果进位变量还有1,则添加在后面。

最后将其逆序并转成字符串输出即可。

import java.util.Scanner;

public class Main
public static void main(String[] args)
Scanner scan = new Scanner(System.in);
while (scan.hasNext())
String s1 = scan.next();
String s2 = scan.next(); //输入两个数
String res = add(s1, s2); //输出
System.out.println(res);



private static String add(String s1, String s2) //两个字符串整数相加
StringBuilder res = new StringBuilder();
int n = s1.length() - 1;
int m = s2.length() - 1;
int carry = 0; //进位
while (n >= 0 || m >= 0) //从两个人字符串最后一位开始相加
char c1 = n >= 0 ? s1.charAt(n--) : 0; //没有了就用0代替
char c2 = m >= 0 ? s2.charAt(m--) : 0;
int sum = (c1 - 0) + (c2 - 0) + carry; //两个数子与进位相加
res.append(sum % 10); //余数添加进结果
carry = sum / 10; //进位


if (carry == 1) //最后的进位
res.append(carry);

return res.reverse().toString(); //反转后转成字符串

方法二:大整数运算

直接利用Java的大整数类,将字符串转变成大整数类型,然后将后者加到前者。

import java.util.Scanner;
import java.math.BigInteger;

public class Main
public static void main(String[] args)
Scanner scan = new Scanner(System.in);
while (scan.hasNext())
String s1 = scan.next();
String s2 = scan.next(); //输入两个数
BigInteger a = new BigInteger(s1); //将字符串转成大整数
BigInteger b = new BigInteger(s2);
System.out.println(a.add(b)); //大整数相加


以上是关于#yyds干货盘点# 解决华为机试:高精度整数加法的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# 解决华为机试:记负均正II

#yyds干货盘点# 解决华为机试:杨辉三角的变形

#yyds干货盘点# 解决华为机试:配置文件恢复

#yyds干货盘点# 解决华为机试:成绩排序

#yyds干货盘点# 解决华为机试:字符统计

#yyds干货盘点# 解决华为机试:称砝码