必须都要进行字符串翻转处理,从最低位开始按位相乘、相加、相减 否则位置不好对应,很容易出错。
package test1;
public class BigDataMinusAddCheng {
public static void main(String[] args){
String a = "129";
String b = "44413";
System.out.println(chengfa(a,b));
// System.out.println(add(a,b));
System.out.println(minus(a,b));
}
/**************乘法******/
public static String chengfa(String a,String b){
// TODO 自动生成的方法存根
System.out.print("乘法:"+"s"+"*"+"b"+"=");
//获取首字母判断正负号
char signA = a.charAt(0);
char signB = b.charAt(0);
char sign ='+';//初始化
boolean flag1=true;boolean flag2=true;
//不影响,因为如果没有符号就不用取子串了
if(signA=='+' || signA=='-'){
sign=signA;
a=a.substring(1);
}
if(signB=='+' || signB=='-'){
if(sign==signB){
sign='+';
}
else{
sign='-';
}
b=b.substring(1);
}
char[] A = new StringBuffer(a).reverse().toString().toCharArray();
char[] B = new StringBuffer(b).reverse().toString().toCharArray();
int[] res = new int[A.length+B.length];
int[] x = new int[A.length];
for(int i = 0;i<x.length;i++){
x[i]=A[i]-'0';
}
int[] y = new int[B.length];
for(int i = 0;i<y.length;i++){
y[i]=B[i]-'0';
}
for(int i = 0;i<A.length;i++){
for(int j=0;j<B.length;j++){
res[i+j]+=x[i]*y[j];
}
}
for(int i = 0;i<A.length+B.length;i++){
if(res[i]>10){
res[i+1]+=res[i]/10;
res[i]=res[i]%10;
}
}
StringBuffer sb = new StringBuffer();
boolean flag =true;
for(int i = A.length+B.length-1;i>=0;i--){
if(res[i]==0 && flag){
continue;
}
else{
flag=false;
}
sb.append(res[i]);
}
if(!sb.toString().equals("")){
if(sign=='-'){
sb.insert(0, sign);
}
}
else{
sb.append(0);
}
return (sb.toString());
}
/******************加法*******************/
public static String add(String a,String b){
System.out.print("加法:"+"s"+"+"+"b"+"=");
char[] A = new StringBuffer(a).reverse().toString().toCharArray();
char[] B = new StringBuffer(b).reverse().toString().toCharArray();
int lenA = a.length();
int lenB = b.length();
int len = lenA>lenB?lenA:lenB;
int[] res = new int[len+1];//留出进最高位
for(int i=0;i<=len;i++){
int ai = i<lenA ?(A[i]-'0'):0;
int bi = i<lenB ?(B[i]-'0'):0;
res[i] = ai+bi;
}
for(int i = 0;i<=len;i++){
if(res[i]>10){
res[i+1]+=res[i]/10;
res[i]=res[i]%10;
}
}
StringBuffer sb = new StringBuffer();
boolean flag =true;
for(int i=len;i>=0;i--){
if(res[i]==0 && flag){
continue;
}
else{
flag=false;
}
sb.append(res[i]);
}
return sb.toString();
}
/**************减法**************/
public static String minus(String a,String b){
System.out.print("减法:"+"s"+"-"+"b"+"=");
char[] A=new StringBuffer(a).reverse().toString().toCharArray();
char[] B=new StringBuffer(b).reverse().toString().toCharArray();
int lenA = A.length;
int lenB = B.length;
int len = lenA>lenB?lenA:lenB;
int [] res = new int[len];
//找出结果的正负
char sign='+';
if(lenA<lenB){
sign='-';
}
else if(lenA==lenB){
int i=lenA -1;
while(i>0&&A[i]==B[i]){
i--;
}
if(A[i]<B[i]){
sign='-';
}
}
//计算结果
for(int i=0;i<len;i++){
int ai=i<lenA?(A[i]-'0'):0;
int bi=i<lenB?(B[i]-'0'):0;
if(sign=='+'){
res[i]=ai -bi;
}
else{
res[i]=bi-ai;
}
}
for(int i=0;i<len-1;i++){
if(res[i]<0){
res[i]+=10;
res[i+1]-=1;
}
}
StringBuffer sb = new StringBuffer();
for(int i=len-1;i>=0;i--){
boolean flag=true;
if(res[i]==0 && flag){
continue;
}
else{
flag=false;
}
sb.append(res[i]);
}
if(sign=='-'){
sb.insert(0, '-');
}
return sb.toString();
}
}