java实现大数减法算法
2017-10-26 18:49
316 查看
public static char[] subTract(int[] a,int[] b){ int cLength = b.length; char sign = '+'; // 长度大,肯定正数 if(a.length > b.length){ cLength = a.length; sign = '+'; } else if(a.length == b.length) {//长度等于,要逐位比较 int i = 0; // 找出哪一位值不同 while(i<cLength && a[i] == b[i]){ i++; } // 如果全都相同,直接返回值为一个0的数组 if(i == cLength){ return new char[]{'0'}; } cLength = cLength - i; if(a[i] > b[i]){ sign = '+'; } else { sign = '-'; } } else {// 长度小于,肯定负数 sign = '-'; cLength = b.length; } if(sign == '+'){ int[] c = subWhenAbig(a,b,cLength); char[] result = new char[c.length]; for(int i=0;i<c.length;i++){ result[i] = String.valueOf(c[i]).toCharArray()[0]; } return result; } else { int[] c = subWhenAbig(b,a,cLength); char[] result = new char[c.length + 1]; result[0] = '-'; for(int i=0;i<c.length;i++){ result[i+1] = String.valueOf(c[i]).toCharArray()[0]; } return result; } } private static int[] subWhenAbig(int[] a, int[] b, int cLength) { int[] c = new int[cLength]; int i = a.length -1; int j = b.length -1; int k = c.length -1; while(i >= 0){ if(a[i] < 0){ a[i] = 10 + a[i]; a[i-1] = a[i-1] - 1; } if(j < 0){ c[k] = a[i]; } else { if(a[i] >= b[j]){ c[k] = a[i] - b[j]; } else { c[k] = a[i] - b[j] + 10; a[i-1] = a[i-1] - 1; } } i--;j--;k--; } boolean firstZero = true; for(int x = 0;x < c.length;x++){ if(c[x] == 0 && firstZero){ cLength--; } else { firstZero = false; } } int[] result = new int[cLength]; int y = 0; for(int x = c.length - cLength;x < c.length;x++,y++){ result[y] = c[x]; } return result; }
相关文章推荐
- 剑指offer编程题Java实现——面试题12相关题大数的加法、减法、乘法问题的实现
- 大数相乘问题--算法思想及Java实现解析(附详细注释)
- 大数手算法开平方(Java实现)
- 大数算法 -- 正整数相乘(Java 实现)
- 用java实现的素数第二种算法
- 中国农历算法java实现(转自Herong Yang)
- Java中的几种算法的实现
- 用Java实现归并排序(Merge-Sort)算法
- java实现的18位身份证格式验证算法
- FIFO与LRU 算法实现(java)
- AIX 程序设计大赛-AIX正方形问题算法及Java程序实现(方案二)
- 图象细化算法实现的java applet源代码
- 八皇后问题 java实现,算法两则
- java的几种算法的实现
- java实现的18位身份证格式验证算法
- java归并算法实现
- Java和C#摘要算法实现
- 在java中实现图形学中的直线算法
- 图像边缘检测(Canny 算法)的Java实现
- AIX 程序设计大赛-AIX正方形问题算法及Java程序实现(方案三)