两个大数相加问题
2018-04-02 19:53
309 查看
问题:
输入:
行数n,接下来n行每行两个数
输出:
n行,每行为两个数的和
Notice that the integers are very large, that means you should not process them by using 32-bit integer.
先贴出我的解决代码(经过运行为正确)
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
}
BigInteger常用来处理大数问题。
遇到问题:
1:给b[i]赋a[i][0]加自身的值时:b[i].add(a[i][j]);
出现未能给b[i]成功赋值的情况。
原因:因为BigInteger与BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以b[i].add(a[i][j]);虽然做了加法操作,但是b[i]并没有保存加操作后的值,正确的用法应该是b[i]=b[i].add(a[i][j]);减乘除操作也是一样的返回一个新的BigDecimal对象,b[i]这个BigDecimal对象也应该声明。(当然这儿在数组处就已经声明了)
2:报空指针异常:在b[i]=b[i].add(a[i][j]);这一行代码处
可能有以下几种情况发生空指针异常:(网上查询结果)
解释是”程序遇上了空指针”。简单地说就是调用了未经初
始化的对象或者是不存在的对象,这个错误经常出现在创建图
片,调用数组这些操作中,比如图片未经初始化,或者图片创建
时的路径错误等等。对数组操作中出现空指针。数组的初始化是
对数组分配需要的空间,而初始化后的数组,其中的元素并没有
实例化,依然是空的,所以还需要对每个元素都进行初始化(如
果要调用的话)
我认为是在这儿我没有初始化b数组,造成了报空指针异常。
所以我用了一个循环对数组进行初始化。
我将b[]中的数全部初始化为0,调用了BigInteger的构造方法,先将int转换为十进制的字符串形式,再转换为BigInteger。
(在实际项目中不建议将int转换为BIgInteger,会损失精度)
输入:
行数n,接下来n行每行两个数
输出:
n行,每行为两个数的和
Notice that the integers are very large, that means you should not process them by using 32-bit integer.
先贴出我的解决代码(经过运行为正确)
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) { Scanner in=new Scanner(System.in); int n=in.nextInt(); BigInteger[][] a=new BigInteger [2]; BigInteger[] b=new BigInteger ; for (int i = 0; i < b.length; i++) { b[i]=new BigInteger(String.valueOf(0)); } for (int i = 0; i <n; i++) { for (int j = 0; j < a[i].length; j++) { a[i][j]=in.nextBigInteger(); } } for (int i = 0; i < n; i++) { for(int j=0;j<a[i].length;j++){ b[i]=b[i].add(a[i][j]); } } for (int i = 0; i < b.length; i++) { System.out.println(a[i][0]+"+"+a[i][1]+"="+b[i]); } }
}
BigInteger常用来处理大数问题。
遇到问题:
1:给b[i]赋a[i][0]加自身的值时:b[i].add(a[i][j]);
出现未能给b[i]成功赋值的情况。
原因:因为BigInteger与BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以b[i].add(a[i][j]);虽然做了加法操作,但是b[i]并没有保存加操作后的值,正确的用法应该是b[i]=b[i].add(a[i][j]);减乘除操作也是一样的返回一个新的BigDecimal对象,b[i]这个BigDecimal对象也应该声明。(当然这儿在数组处就已经声明了)
2:报空指针异常:在b[i]=b[i].add(a[i][j]);这一行代码处
可能有以下几种情况发生空指针异常:(网上查询结果)
解释是”程序遇上了空指针”。简单地说就是调用了未经初
始化的对象或者是不存在的对象,这个错误经常出现在创建图
片,调用数组这些操作中,比如图片未经初始化,或者图片创建
时的路径错误等等。对数组操作中出现空指针。数组的初始化是
对数组分配需要的空间,而初始化后的数组,其中的元素并没有
实例化,依然是空的,所以还需要对每个元素都进行初始化(如
果要调用的话)
我认为是在这儿我没有初始化b数组,造成了报空指针异常。
所以我用了一个循环对数组进行初始化。
我将b[]中的数全部初始化为0,调用了BigInteger的构造方法,先将int转换为十进制的字符串形式,再转换为BigInteger。
(在实际项目中不建议将int转换为BIgInteger,会损失精度)
相关文章推荐
- 两个大数相加问题
- hdu_1002 大数相加----高精度问题
- 线性表的应用——求解两个多项式相加问题描述(链表求解)
- php实现两个大数相加
- [ACM] ZOJ Martian Addition (20进制的两个大数相加)
- 单链表表示的大数相加问题
- leetcode_445. Add Two Numbers II 单链表表示的两个大数相加
- JAVA实现两个大数相加
- 杭电oj1002即用c++实现两个大数相加
- 两个大数相加
- JS两个小数相加,精度不对问题
- 用C处理大数相加问题
- 4.用链表实现两个大数相加
- 大数问题:用字符串解决大数相加和相乘(转载)
- 两个大数相加比较符合自然运算的算法
- 两个大数相加,使用字符串模拟相加过程
- c语言大数乘法各位相加问题
- Android下两个double类型相加的问题
- 大数问题:用字符串解决大数相加和相乘
- twoSum问题 两个数组相加为确定值,输出对应数组的位置