zoukankan      html  css  js  c++  java
  • 大数相乘 java

    <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();
        }
    }
    


    
       
    
    
  • 相关阅读:
    使用gzip优化web应用(filter实现)
    在Spring、Hibernate中使用Ehcache缓存(2)
    Ehcache 整合Spring 使用页面、对象缓存(1)
    ehcache-----在spring和hibernate下管理ehcache和query cache
    使用Spring MVC构建REST风格WEB应用
    开涛spring3(12.4)
    开涛spring3(12.3)
    LLE局部线性嵌入算法
    图像固定条纹干扰
    多尺度字典学习超分辨率——相关中文文献
  • 原文地址:https://www.cnblogs.com/yan456jie/p/5369384.html
Copyright © 2011-2022 走看看