加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数相乘 java

发布时间:2020-12-14 01:58:16 所属栏目:大数据 来源:网络整理
导读:pre name="code" class="java"package bigMultiply;import java.math.BigInteger;/** * 大數相乘 * @author root * */public class MyMultiply1 { /** * @param args */ public static void main(String[] args) { String str1 = "2345678900987766655554444
<pre name="code" class="java">package bigMultiply;

import java.math.BigInteger;
/**
 * 大數相乘
 * @author root
 *
 */
public class MyMultiply1 {  
	  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
    	String str1 = "23456789009877666555544444";
        String str2 = "346587436598437594375943875943875";
        
        String result = multiply(str1,str2);
        String result1 = multiply1(str1,str2);
  
        System.out.println("乘数:"+str1);
        System.out.println("乘数:"+str2);
        System.out.println("结果:"+result);
        System.out.println("结果:"+result1);
    }
    
    private static String multiply1(String str1,String str2){
    	BigInteger bigInteger1=new BigInteger(str1);
    	BigInteger bigInteger2=new BigInteger(str2);
    	//multiplay
    	bigInteger1=bigInteger1.multiply(bigInteger2);
    	return bigInteger1.toString();
    }
  
    public static String multiply(String str1,String str2) {  
        //判断符号
    	char flag1;
    	char flag2;
    	char flag;
    	if(str1.charAt(0)=='-'){
    		flag1 = '-';
    		str1 = str1.substring(1);
    	}else if(str1.charAt(0)=='+'){
    		flag1 = '+';
    		str1 = str1.substring(1);
    	}else{
    		flag1 = '+';
    	}
    	if(str2.charAt(0)=='-'){
    		flag2 = '-';
    		str2 = str2.substring(1);
    	}else if(str2.charAt(0)=='+'){
    		flag2 = '+';
    		str2 = str2.substring(1);
    	}else{
    		flag2 = '+';
    	}
    	if(flag1==flag2){
    		flag = '+';
    	}else{
    		flag = '-';
    	}
    	// 两数乘积位数不会超过乘数位数和+ 3位 
    	char [] s1 = new StringBuffer(str1).reverse().toString().toCharArray();
    	char [] s2 = new StringBuffer(str2).reverse().toString().toCharArray();
    	
    	int [] result = new int[str1.length()+str2.length()+3];
    	//逐位相乘
    	for(int i=0; i<s1.length; i++){
    		for(int j=0; j<s2.length; j++){
    			result[i+j]+= (s1[i]-'0')*(s2[j]-'0');
    		}
    	}
    	//进位
    	for(int i=0; i<result.length-1; i++){
    		result[i+1]+=result[i]/10;
    		result[i] = result[i]%10;
    	}
    	//输出
    	boolean start = false;
    	StringBuilder sb = new StringBuilder();
    	sb.append(flag);
    	for(int i=result.length-1; i>=0; i--){
    		if(result[i]!=0){
    			start=true;
    		}
    		if(start){
    			sb.append(result[i]);
    		}
    	}
    	return sb.toString();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读