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


    
       
    
    
  • 相关阅读:
    HashMap Hashtable LinkedHashMap 和TreeMap
    RestTemplate -springwebclient
    IntelliJ IDEA 12:
    mac安装RabbitMQ
    mysql 常用,使用经验
    消息中间件性能究竟哪家强?
    log4j2配置文件log4j2.xml
    内存增长 避免
    nginx 服务器重启命令,关闭
    jquery获取css color 值返回RGB
  • 原文地址:https://www.cnblogs.com/yan456jie/p/5369384.html
Copyright © 2011-2022 走看看