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


    
       
    
    
  • 相关阅读:
    ubuntu16.04安装mongodb
    redis 允许远程链接
    mongodb将一个集合的数据加入到另外一个集合
    记录一次字符的坑
    Linux定时任务指定用户
    laravel 除了根目录,所有接口地址都是404
    记录一次php7-mongodb扩展的坑
    nginx 解决跨域
    记录一次部署
    MAC或者linux通过SSH使用PEM文件登录
  • 原文地址:https://www.cnblogs.com/yan456jie/p/5369384.html
Copyright © 2011-2022 走看看