大数加法
/**
* @param args
*/
public static void main(String[] args) {
BigInt b = new BigInt();
b.add("999999999999444599999999999999999", "99223333333223455559");
}
public String add(String a, String b) {
// 检查输入
if (!a.matches("\\d+") || !a.matches("\\d+")) {
return null;
}
final int BASE = 10;// 10进制
int lenA = a.length();// 加数的长度
int lenB = b.length();// 被加数的长度
int maxLen, partialSum, carry = 0;// 大数的长度,和,进位
maxLen = (lenA > lenB) ? lenA : lenB;
StringBuffer sum = new StringBuffer();
int temA, temB = 0;
for (int i = 0; i < maxLen; i++) {
if (i >= lenA) {
temA = 0;
} else {
temA = Integer.valueOf(a.charAt(lenA - i - 1) - 48);
}
if (i >= lenB) {
temB = 0;
} else {
temB = Integer.valueOf(b.charAt(lenB - i - 1) - 48);
}
partialSum = temA + temB + carry;
carry = partialSum / BASE;
sum.append(partialSum % BASE);
}
if (carry == 1)
sum.append(carry);
System.out.println(a + " + " + b + " = " + sum.reverse().toString());
return sum.reverse().toString();
}
分享到:
相关推荐
对于两个大数 `a` 和 `b`,我们可以创建一个与 `a` 和 `b` 长度相同的数组来存储每一位,然后从最低位开始逐位相加,并处理进位。 以下是一个简单的算法描述: 1. 初始化两个大数 `a` 和 `b` 为字符串形式,按位...
3. **逐位相加**:遍历两个反转后的数字字符串,对于每一位,执行以下操作: - 获取两位的和,如果超过10,则将进位设置为1,当前位的结果设为和模10。 - 如果有进位,需要将其加到下一位的和上。 4. **处理负数*...
这道“大数相加”面试题目的核心就是如何在JavaScript环境下实现两个大数(超过Number类型所能表示的最大值)的加法运算。这个问题涉及到字符串处理、循环以及进位逻辑等基本编程技巧。 首先,我们需要理解为什么不...
### 中级程序员必备面试题解析 ...对于两个数相加超过`long`类型最大值的情况,可以使用`BigInteger`类进行大数运算。 以上内容涵盖了中级程序员面试中常见的知识点和技术细节,旨在帮助准备面试的开发者全面理解...
C 和 C++ 笔试面试题涵盖了广泛的编程概念和技术,以下是对这些题目涉及知识点的详细解释: 1. **函数返回值**:函数的返回值通常取决于其定义的返回类型和执行的操作。例如,如果函数没有明确的返回语句,但包含了...
以下是根据提供的面试题整理的一些关键知识点: 1. **文件操作**:在Python中,可以通过`open()`函数读取和写入文件,常用模式有'r'(读)、'w'(写)、'a'(追加)。对于JSON格式的数据,可以使用`json`模块进行...
例如,两个最大的`int`值相加会得到一个负数,这是由于溢出造成的。因此,要实现一个能处理百亿级别计算的计算器,我们需要自定义一个类,比如`BigInteger`,它能存储和操作大整数。 `BigInteger`类通常会有以下...
8. 字符串相加:给定两个字符串,计算它们的和。这个问题可以使用大数运算来解决,时间复杂度为O(n),空间复杂度为O(n)。 9. 交错字符串:给定两个字符串,找到它们的交错字符串。这个问题可以使用动态规划来解决,...
以上解答了C语言中涉及字符串处理的一些基础面试题,实际编程中,我们需要考虑到边界条件、效率优化和错误处理等因素,确保代码的健壮性和正确性。在面试中,理解这些基本概念并能灵活运用是至关重要的。
在Java中,两个short类型的数值相加会自动提升到int类型,所以`s1 = s1 + 1;`会导致编译错误,需要显式转换。而`s1 += 1;`则是合法的,因为Java会自动处理这种类型的提升并进行转换。 8. **char型变量中能不能存贮...
首先判断两个传入字符串的长度,取最短的len循环,两者从低位开始对应位相加,同时注意保存进位。在短的数据处理完后,将进位交给较长串的剩余部分处理。 详细实现看一下代码,完整实例见jsfiddle 代码如下: var ...
- **问题描述**:找出只包含两个不同ASCII字符的最长子串。 - **知识点**:字符串处理,滑动窗口算法。 #### 14. 最小长度表达式 - **问题描述**:给定一个整数,找到表达该整数的最小长度,其中长度定义为若干个...
示例代码中的`f`函数通过两个变量`s1`和`s2`分别存储`f(n-1)`和`f(n-2)`的值,然后在循环中更新它们来计算`f(n)`。 6. **交换两个数**: - 不使用额外内存的交换技巧是通过加减操作完成的,将`a`和`b`的值相加,...
3. **大数相加**:此题要求处理两个大数的加法运算。考生应设计算法存储和处理大整数,可以使用字符串或数组来表示,然后逐位相加并处理进位。 4. **最长公共子串**:输入两个字符串,找出它们的最长公共子串。考生...
6. **算法**:如最大频率单词、两个大数相加等,体现了候选人的编程思维能力。 7. **数组操作**:判断数组A是否为数组B的子集,涉及到数组遍历和比较。 8. **网络基础**:IP解析、DNS解析等,了解从输入URL到页面...
1. **基本算法题**:这类题目通常涉及到逻辑推理,例如给出两个字符串相加的表达式,要求推测每个字母代表的数字。这需要应聘者具备扎实的逻辑分析能力,同时熟悉字符串处理和简单的数学运算。 2. **数据库**:在...
需要正确地相加这两个数,并以链表形式返回。 - Median of Two Sorted Arrays: 给定两个排序的数组,找到它们的中位数。解决这个问题的高效算法需要注意时间复杂度。 - Longest Palindromic Substring: 要求找出字符...
- 两个链表表示的大数相加。 - 实现思路:模拟加法过程,逐位相加并处理进位。 - **2.2.2 Reverse LinkedList II** - 反转链表的一部分。 - 实现思路:找到反转部分的起始和结束节点,使用迭代或递归的方法进行...