炒沙作縻终不饱,缕冰文章费工巧。这篇文章主要讲述#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(); //反转后转成字符串
方法二:大整数运算
【#yyds干货盘点# 解决华为机试(高精度整数加法)】直接利用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)); //大整数相加
推荐阅读
- Linux卸载MySQL
- C语言Linux下动态库和静态库详解
- Android C++系列(Linux进程)
- # yyds干货盘点 # Pandas入门教程
- Linux系统编程应用 Linux输入子系统(二)
- Linux系统编程应用 Linux系统中找不到设备/dev/fb0
- BGP 路由协议
- win10系统无法安装打印机怎样办?
- win10系统任务栏不见了如何恢复?