1. 程式人生 > >大整數相乘------java實現

大整數相乘------java實現

大數相乘演算法實現:(Java版,使用BigInteger)(含有大數的加、減、乘、除)

package com.bigInteger;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;

/*******************************************************************
 * 功能描述:
 * 建立資訊:jtm 2016-4-1
 * 修改資訊:
 ********************************************************************/

public class BigIntegerFunc {

	public static void main(String[] args) throws IOException {	//獲取使用者的輸入資訊	
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));		
		String str1=null;
		String str2=null;
		System.out.print("第一個乘數是:");
		str1 =br.readLine();		
		System.out.print("第二個乘數是:");
		str2 =br.readLine();
		BigNumMutiply(str1, str2);
	}
	private static void BigNumMutiply(String str1, String str2) {
		// TODO Auto-generated method stub
		BigInteger bigNum1 =new BigInteger(str1);
		BigInteger bigNum2 =new BigInteger(str2);
		BigInteger sumNum =bigNum1.add(bigNum2);//大數相加
		BigInteger subNum =bigNum1.subtract(bigNum2);//大數相減
		BigInteger mutiNum =bigNum1.multiply(bigNum2);//大數相乘
		BigInteger divNum =bigNum1.divide(bigNum2);//大數相除
		BigInteger remNum =bigNum1.remainder(bigNum2);//大數取餘
		System.out.println("加"+sumNum+"減"+subNum+"乘積"+mutiNum+"除"+divNum+"餘"+remNum);
	}

}

大數相乘演算法實現2-----不是用BigInteger
package com.bigInteger;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/***
 * 大數相乘
 * *****************************************************************
 */

public class bigInteger {

	public static void main(String[] args) throws IOException{
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));		
		String str1=null;
		String str2=null;
		System.out.print("第一個乘數是:");
		str1 =br.readLine();		
		System.out.print("第二個乘數是:");
		str2 =br.readLine();	
		BigNumMutiply(str1, str2);

	}
	public static void BigNumMutiply(String str1,String str2){
		System.out.print("大數相乘:\n" + str1 + "*" + str2 + "="); 
		int temp=0;//用於記錄輸入大數的正負號個數
		if(str1.charAt(0)=='-'){//判斷str1代表的數值的正負,如果負,刪除負號,temp++
			StringBuffer sb1=new StringBuffer(str1);
			sb1.delete(0, 1);
			str1=sb1.toString();
			temp++;
		}
		if(str2.charAt(0)=='-'){//判斷str2代表的數值的正負,如果負,刪除負號,temp++
			StringBuffer sb2=new StringBuffer(str2);
			sb2.delete(0, 1);
			str2=sb2.toString();
			temp++;
		}
		//將字串轉為字元型陣列,並反轉
		char[] a=new StringBuffer(str1).reverse().toString().toCharArray(); 
		char[] b=new StringBuffer(str2).reverse().toString().toCharArray();		
		int lenA =a.length;
		int lenB =b.length;
		//常識:一般兩個數相乘,結果長度不大於兩個乘數的長度之和
		int len =lenA+lenB;
		//初始化乘數結果
		int[] result =new int[len];
		// 計算結果集合 
        for (int i = 0; i < a.length; i++) {  
            for (int j = 0; j < b.length; j++) {  
                result[i + j] += (int) (a[i] - '0') * (int) (b[j] - '0');  
            }  
        } 
        //處理結果集合,如果是大於10的就向前一位進位,本身進行除10取餘
        for (int i = 0; i < result.length; i++) {  
            if (result[i] > 10) {  
                result[i + 1] += result[i] / 10;  
                result[i] %= 10;  
            }  
        }         
        StringBuffer sb = new StringBuffer();  
        //判斷有沒有前置的0,有的話跳過
        for (int i = len - 1; i >= 0; i--) {  
        	if (result[i] == 0) {  
                continue;  
            } 
            sb.append(result[i]);  
        } 
        if(temp==0||temp==2){//判斷最後大數相乘的正負     	
        	System.out.println(sb.toString());
        }else{
        	sb.insert(0,'-');
        	System.out.println(sb.toString());
        }
	}
}

相關推薦

整數相乘------java實現

大數相乘演算法實現:(Java版,使用BigInteger)(含有大數的加、減、乘、除) package com.bigInteger; import java.io.BufferedReader; import java.io.IOException; import

分治演算法:整數相乘 字串實現

由於網上大部分用分治演算法實現的大整數相乘程式,其輸入乘數竟然設定為int值,實現了分治思想,但實在不能稱其為大整數。本文實現了用字串儲存乘數,並且輸出正確結果。由於演算法未經過大量資料測試,可能還存在問題,歡迎指教討論,求輕踩。。。 演算法分析:https://www.cnblogs.com/

整數相加java實現

package test; public class MaxIntSum { public static void main(String[] args) { String a="1999999

整數四則運算Java實現

                                     大整數四則運算Java實現

整數乘法 java實現

public static String multiply(String s1, String s2) { StringBuilder sb1 = new StringBuilder(s1); StringBuilder sb2 = new

整數相乘問題總結以及Java實現

語言 java 變換 hal () 以及 pow divide 優化 最近在跟coursera上斯坦福大學的算法專項課,其中開篇提到了兩個整數相乘的問題,其中最簡單的方法就是模擬我們小學的整數乘法,可想而知這不是比較好的算法,這門課可以說非常棒,帶領我們不斷探索更優的算法,

分治演算法-整數相乘JAVA實現

 上大學演算法分析實驗課的內容.關於利用分治法大整數乘法.還沒有解決大整數的儲存方式,應該是要利用一維陣列來解決.所以目前只是5位數的運算沒有問題.程式健全  1/** *//** 2 * 大整數項乘 3 * @author Administrator 4 * 5 */ 6import java.io.B

基於Java整數運算的實現(加法,減法,乘法)學習筆記

-1 urn 相加 his add oid one 我會 後來 大整數,顧名思義就是特別大的整數。 一臺64位的機器最大能表示的數字是2的64次方減一: 18446744073709551615 java語言中所能表示的整數(int)最小為-2147483648 pu

【面試題】Java 2個(多個)整數相加如何實現

之前面試阿里的時候,第四面的時候面試官讓我當他面實現這個題目, 一開始的時候問的時候 2個相加如何實現,然後我寫完了之後又問我如果是多個相加呢?面試官希望我能在實現的時候能夠考慮到各種可能性,比如多個數相加,然後等我寫完了之後,又問我有沒有更好的實現方法;以下是我的實現方法; 將待相加

java程式計算兩個整數相乘

方法1 :用兩個字串儲存輸入的大整數,然後用第二個字串的每一位去乘第一個字串的數字值,最後將每次的結果錯位相加即可。時間複雜度高O(n^2) 方法2:將兩個大整數X,Y每次分割成兩半,第一個分割成AB,第二個分割成CD。所以最後結果XY=(A*10^n/2 +B)(C*10^m/2+D);進

JAVA 整數加法的實現

/** * 整數加法 * * @param lv * 左值 * @param rv * 右值 * @param result * 相加的結果 * @數值存放說明 數值的每

python實現整數相乘---格子乘法

        以前做ACM的時候,許多人都通過 BigInteger 來實現大數乘法,讓我記憶猶新的事2012年的遼寧省賽在大連大學,第一道水題就是大整數乘法,那時還不會java。 大數乘法的實現是基於印度的格子乘法,使用這種方法,計算 m 位數乘以 n 位數只需要建立一

分治法——整數相乘

post mat stdio.h log clas pos tdi class temp #include <stdio.h>#include <string.h>#include <conio.h>#include <math.h

[Nowcoder] 整數相乘(拼多多筆試題)

pac push_back coder 大數 str1 位數 問題 str 例子 有兩個用字符串表示的非常大的大整數,算出他們的乘積,也是用字符串表示。不能用系統自帶的大整數類型。 輸入描述: 空格分隔的兩個字符串,代表輸入的兩個大整數 輸出描述: 輸入的乘積,用字符串表

對於分治法求整數相乘程式碼以及思路

分治演算法步驟: 1. 分解,將要解決的問題劃分為若干個規模較小的同類問題 2. 求解,當子問題劃分的足夠小時,用較簡單的方法解決 3. 合併,按原問題的要求,將子問題的解逐層合併構成原始問題的解 對於大整數相乘 需要如下幾步: 如 1234 5678 首先進行分解:

整數減法java

package com.text1; /*  * 大整數減法實現  */ public class ReduceBignum {       public static void reduce(int a[],int b[]) { &n

整數相乘問題

看到一道經典的面試題目---大整數相乘問題,完完整整敲了一遍,並且在牛客網運行了一遍,AC過了。 所採用的的方法是進位的方法。 舉個例子: 用 789 × 956 ,通過計算我們很容易得到 754284 , 除了筆算或者口算的方法我們還可以用一種非常巧妙的方法來進行計算。 這個方法的

劍指offer之將字串轉換成整數Java實現

將字串轉換成整數 NowCoder 題目描述: 將一個字串轉換成一個整數(實現Integer.valueOf(string)的功能,但是string不符合數字要求時返回0),要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0。 輸入描述: 輸入一個

一個整數類的實現

好久沒寫了。這次寫前一陣子的一個大整數類,順便請教幾個問題。 目標很簡單,就是實現大整數的基本算術運算。 首先,是資料儲存方式問題。簡單明瞭點可以用直接的數字字串,但缺點是,一個位元組256個資訊點只用了10個(或16個,如果用16進位制的話),浪費空間,而且增大了資料規模。於是考慮用盡空間,使用

分治法優化整數乘法 C++實現

上大學演算法分析實驗課的內容.關於利用分治法大整數乘法.還沒有解決大整數的儲存方式,應該是要利用一維陣列來解決.所以目前只是5位數的運算沒有問題.程式不是很健全,但是演算法的核心部分應該是已經都在這裡了. VC++6.0下測試通過. #include <iostream