- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
java解法
- 解题思路
- 这段代码的目标是从一个字符串中解析出所有的数字,根据其符号(正号或负号)计算一个最终的和。代码使用了 BigInteger 类型来处理可能出现的任意长度的大数字。具体步骤如下:
解析字符:逐一遍历字符串中的每个字符,判断是否为数字。
处理正负符号:
如果数字前面有负号,将数字累积到一个缓冲区,稍后作为负数处理。
如果数字前面没有负号,则直接加到总和中。
管理数字缓冲区:
遇到非数字字符时,检查缓冲区是否有未处理的负数。如果有,将缓冲区的内容从总和中减去。
遇到新负号时重置缓冲区,准备解析下一个负数。
结果输出:遍历完成后,返回总和。
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(getResult(sc.nextLine()));
}
public static String getResult(String s) {
boolean isNegative = false;
StringBuilder numberBuffer = new StringBuilder();
BigInteger sum = BigInteger.ZERO;
for (int i = 0; i < s.length(); i++) {
char currentChar = s.charAt(i);
if (Character.isDigit(currentChar)) {
if (isNegative) {
numberBuffer.append(currentChar);
} else {
sum = sum.add(new BigInteger(String.valueOf(currentChar)));
}
} else {
sum = updateSumAndResetBuffer(isNegative, numberBuffer, sum);
isNegative = currentChar == '-';
}
}
sum = updateSumAndResetBuffer(isNegative, numberBuffer, sum);
return sum.toString();
}
private static BigInteger updateSumAndResetBuffer(boolean isNegative, StringBuilder numberBuffer, BigInteger sum) {
if (isNegative && numberBuffer.length() > 0) {
sum = sum.subtract(new BigInteger(numberBuffer.toString()));
numberBuffer.setLength(0);
}
return sum;
}
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: