Java 大数加减乘(无除),不含小数点

来源:互联网 发布:淘宝网买卖中心 编辑:程序博客网 时间:2024/05/20 04:50
package com.algorithm;public class BigIntegerOpeator {public static void main(String[] args) {String a = "1231313432";String b = "12312376";String result = add(a, b);System.out.println(a + " + " + b + " = " + result);String c = "1234";String d = "5678";System.out.println(c + " - " + d + " = " + sub(c, d));String e = "1234";String f = "1";System.out.println(e + " * " + f + " = " + multi(e, f));}private static String multi(String e, String f) {return multi(e.toCharArray(), f.toCharArray());}/*** @Author:yangwl * @date 2015年12月22日 下午4:15:36 * @param charArray* @param charArray2* @return * @throws * @Description: //大整数相乘* //简单乘法+大整数加法 */private static String multi(char[] a, char[] b) {int b_index = b.length;char [] result = new char[a.length + b.length + 1];int index = result.length;init(result);//首先初始化result数组char [] t = subMulti(a, b[--b_index]);for(int i = t.length-1; i >= 0; i--) {result[--index] = t[i];}index = result.length;int f = 1;while(--b_index >= 0) {char [] t1 = clearZero(result);char [] t2 = subMulti(a, b[b_index]);t2 = (new String(t2) + getZero(f)).toCharArray();if(null == t1) {t1 = result;}char[] t3 = add(t1, t2).toCharArray();int l = result.length;for(int i = t3.length-1; i >= 0; i--) {result[--l] = t3[i];}f++;}replace(result);return new String(result).replace("_","");}private static void replace(char[] result) {for(int i = 0; i < result.length; i++) {if(result[i] == '0') {result[i] = '_';} else {break;}}}private static String getZero(int f) {String s="";for(int i = 0; i < f; i++) {s += "0";}return s;}private static char[] clearZero(char[] result) {for(int i = 0; i < result.length; i++) {if(result[i] != '0') {return new String(result, i, result.length - i).toCharArray();}}return null;}private static char[] subMulti(char[] a, char c) {char [] result = new char[a.length+1];init(result);int index = result.length;int a_index = a.length;while(--a_index >= 0 && --index >= 0) {int r = parseToInt(a[a_index]) * parseToInt(c);result[index] = parseToChar(parseToInt(result[index]) + r % 10);if(r >= 10) {result[index-1] = parseToChar(parseToInt(result[index-1]) + r / 10);}}return (result[0] == '0' ?  new String(result,1,result.length-1) : new String(result)).toCharArray();}/*********************************************************************************************************************************************************************/private static String sub(String a, String b) {return sub(a.toCharArray(), b.toCharArray());}/*** @Author:yangwl * @date 2015年12月22日 下午1:10:11 * @param charArray* @param charArray2* @return * @throws * @Description: //两个数做减法 */private static String sub(char[] a, char[] b) {int index = 0;boolean flag = true;if (a.length > b.length){index = a.length;}if (b.length > a.length) {index = b.length;flag = false;}if (a.length == b.length) {index = a.length;for(int i = 0; i < index; i++) {if(parseToInt(a[i]) > parseToInt(b[i])) {break;}if(parseToInt(b[i]) > parseToInt(a[i])) {flag = false;break;}if(parseToInt(b[i]) == parseToInt(a[i])) {if(i+1 == index) return parseToChar(0)+"";continue;}}}char [] result;if(!flag) {result = a;a = b;b = result;} result = new char[index];int a_index = a.length-1;int b_index = b.length-1;index--;while(index != -1) {int a_value = 10;if(a_index > -1) {a_value = parseToInt(a[a_index]);;}int sub = a_value;if(b_index > -1) {if(10 == sub) {System.out.println("执行出错.");return "";};int b_value =  parseToInt(b[b_index--]);if(a_value >= b_value) {sub = a_value - b_value;} else {//首先借1a[a_index-1] = parseToChar(parseToInt(a[a_index-1]) - 1 + 48);sub = a_value + 10 - b_value;}}a_index --;result[index--] = parseToChar(sub);}if(result[0] == '0') {if(flag) {return new String(result,1,result.length-1);} else {result[0] = '-';return new String(result);}} else {if(flag) {return new String(result);} else {return "-"+new String(result);}}}private static String add(String a, String b) {return add(a.toCharArray(), b.toCharArray());}/*** @Author:yangwl * @date 2015年12月21日 下午2:20:08 * @param a* @param b* @return * @throws * @Description: //TODO */private static String add(char[] a, char[] b) {int index = a.length > b.length ? a.length + 1 : b.length + 1;char [] result = new char[index];init(result);int a_index = a.length;int b_index = b.length;int i = 0;while(i < index) {int temp = 0;if(--a_index >= 0) {temp = (int)a[a_index] - 48;}if(--b_index >= 0) {temp += (int)b[b_index] - 48;}result[--index] =(char) ((int)(result[index]-48) + temp % 10 + 48);if(temp / 10 == 1) {result[index - 1] = '1'; }}return result[0] == '1' ? new String(result) : new String(result,1,result.length-1);}private static void init(char[] result) {for(int i = 0; i < result.length; i++) {result[i] = '0';}}public static int parseToInt(char c) {return (int)c - 48;}public static char parseToChar(int a) {return (char)(a + 48);}}

0 0
原创粉丝点击