JAVA大数相减
发布网友
发布时间:2022-04-23 03:23
我来回答
共3个回答
热心网友
时间:2023-10-13 05:57
既然是“大数”,那就可能出现BigInteger长度不够的情况,所以不能直接使用楼上的方法。
关于“大数”的定义,需要楼主提供问题细节:
1.被减数、减数是否会出现负数
2.结果是否会出现负数
负数情况可先转化为绝对值的加减,然后根据大小关系为结果添加正负号解决。所以,暂时先讨论最简单、最基本的情况即 a,b都为正整数,且a>b的情况
1.建议把两个数组改成倒序排列 这样相减时可以由a[0]和b[0]开始,即int[] a = { 7, 0, 1, 8, 5, 3, 7 }; int[] b = { 2, 4, 7, 4, 5};
2.遍历两个数组a和b,a[i]-b[i],够减则直接把结果存入a[i],不够减则a[i]+10-b[i]存入a[i],并且a[i+1]=a[i+1]-1,(这里如果不够减,再借位a[i+1]=a[i+1]+10-1;a[i+2]=a[i+2]-1,以此类推,可用递归实现)遍历至b.length结束,然后再将a[i]倒序输出,即为结果。
热心网友
时间:2023-10-13 05:58
因为int类型最大值为9个9,所以超过之个范围的话,需要用BigInteger来进行操作(加减乘除都可以):
public static void main(String[] args) {
// TODO Auto-generated method stub
BigInteger aa =new BigInteger("10000000000000000000");
BigInteger bb= new BigInteger("25000000");
BigInteger sub=aa.subtract(bb);//大整数的减
BigInteger add=aa.add(bb);//大整数的加
BigInteger mul=aa.multiply(bb);//大整数的乘
BigInteger div=aa.divide(bb);//大整数的除
System.out.println(sub.toString());
System.out.println(add.toString());
System.out.println(mul.toString());
System.out.println(div.toString());
}
热心网友
时间:2023-10-13 05:58
public class BigSub {
public static void main(String[] args) {
int[] a = { 7, 3, 5, 8, 1, 0, 7 };
int[] b = { 5, 4, 7, 4, 2};
BigSub.sub(a, b);
}
public static String linkIntArray(int[] array) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; i++) {
sb.append(array[i]);
}
return sb.toString();
}
public static void sub(int[] a,int[] b) {
BigInteger bigA = new BigInteger(linkIntArray(a));
BigInteger bigB = new BigInteger(linkIntArray(b));
System.out.println(bigA+"-"+bigB+"="+bigA.subtract(bigB));
}
}追问謝謝你的回答,試過可以正常執行!
因為我才剛接觸java一個月,然而老師出考試題目
對我說有些困難,所以才來這裡請求幫忙!