大数的加法,减法,乘法

来源:互联网 发布:个体能开淘宝企业店铺 编辑:程序博客网 时间:2024/04/28 22:00

最近在研究算法,其中用到了大数的乘法,于是便对以前写过的大数的加法和减法,放在一起做了各总结,写了个BigData类

如有不完善的地方还请指正。

代码如下:

package com.zjianhao.main;public class BigData {/** * 大数加法 * @param str1 加数 * @param str2 加数 * @return和 */public static String add(String str1,String str2){int len1 = str1.length();int len2 = str2.length();int maxLength = len1>len2? len1:len2;int minLength = len1<len2? len1:len2;int size = maxLength - minLength;if (size>0&&len1>len2){for (int i=0; i<size; i++)str2 = "0"+str2;//位数不够前面补零,使两个字符串一样长,便于处理}else if (size>0&&len1<len2){for (int i=0; i<size; i++)str1 = "0"+str1;//位数不够前面补零,使两个字符串一样长,便于处理}int[] result = new int[maxLength+1];for (int i=0,j=maxLength-1; i<maxLength; i++,j--){result[j+1] += (str1.charAt(j)-'0')+(str2.charAt(j)-'0');if (result[j+1]>=10){result[j] = result[j+1]/10;result[j+1] = result[j+1]%10;}}return removeFrontZero(result);}/** * 被减数大于减数 * @param str1  被减数 * @param str2减数 * @return 差 */public static String subtra(String str1,String str2){int len1 = str1.length();int len2 = str2.length();int maxLength = len1>len2? len1:len2;int minLength = len1<len2? len1:len2;int[] result = new int[maxLength];int size = maxLength - minLength;for (int i=0; i<size; i++)str2 = "0"+str2;//位数不够前面补零,使两个字符串一样长,便于处理for (int i=0,k=maxLength -1,m=len1-1; i<maxLength; i++,k--,m--){int num1= str1.charAt(m) - '0';int num2 = str2.charAt(m)- '0';if (num1 > num2)result[k] += num1 - num2;else {result[k] += num1+10 - num2;result[k-1] -= 1;//向前一位借一}}return removeFrontZero(result);}/** * 带正负号的大整数减法,被减数和减数无大小限制 * @param str1 被减数 * @param str2减数 * @return 差,被减数大于减数返回正数,被减数小于减数返回负数 */public static String subtraction(String str1,String str2){int len1 = str1.length();int len2 = str2.length();if (len1 > len2)return subtra(str1, str2);else if (len1 == len2){for (int i=0; i<len1; i++){int num = (str1.charAt(i) - '0') - (str1.charAt(i) - '0');if (num >0)return subtra(str1, str2);else if (num < 0)return '-'+subtra(str2, str1);else continue;}return "0";}elsereturn '-'+subtra(str2, str1);}/** * 大整数乘法 * @param str1乘数 * @param str2乘数 * @return 积 */public static String multiplication(String str1,String str2){int len1 = str1.length();int len2 = str2.length();int [] result = new int[len1+len2];for (int i=len1-1,pos=len1+len2-1; i>=0; i--,pos--)for (int j=len2-1,k=pos; j>=0; j--,k--){result[k] += (str1.charAt(i)-'0')*(str2.charAt(j)-'0');if (result[k] >= 10){result[k-1] += result[k]/10;result[k] = result[k]%10;}}return removeFrontZero(result);}/** * 将数字前面的零去掉(数字不能以零开头) * @param result * @return */public static String removeFrontZero(int [] result){//去除前边的零StringBuilder builder = new StringBuilder();int i;for (i=0; i<result.length; i++)if (result[i]!=0)break;for (int j=i; j<result.length; j++)builder.append(result[j]);return builder.toString(); }}


1 0
原创粉丝点击