java 2個(多個)大整數相加如何實

先自定義一個異常public class LowerException extends Exception{ int score ; public LowException(int score){ super("分數<=0"); this.score = score; } }新建一個類TestException.java然後寫這個拋異常方法:public void validate(int score) throws LowException { if (score <= 0) { throw new LowException(score); } public int inputScore(int score1,int score2 ) { try { validate(score1); validate(score2); int sum = score1+score2; return sum; } catch (LowException e) { System.out.println("進入低分異常"); System.out.println("數太低了,輸入的分數為" + e.score); e.printStackTrace(); } }public static void main(String[] args) { TestException te = new TestException(); double d1 = Double.parseDouble(args[0]);double d2 = Double.parseDouble(args[0]); System.out.println( te.inputScore(d1,d2)); }}你在編譯完畢後。在命令行執行java TestException 參數1 參數2 。記住參數只可以輸數字。不可以輸別的否則出現不可預知的後果。

② JAVA中如何實現兩個任意大的數相加,百位以上。。。。。求大神指點。。。。

把數字用string類型代表就可以了,寫個方法,每次操作string

③ java數組實現大數相加

package com.nileader.big.entity;

public class BigInt {

private String data_str; //原始數據

private int digit; //數據位數

private int[] data; //大數

private boolean carry = false; //進位標識符

/**

* setter and getter

*/

public boolean isCarry() {

return carry;

}

public void setCarry(boolean carry) {

this.carry = carry;

}

public String getData_str() {

return data_str;

}

public void setData_str(String data_str) {

this.data_str = data_str;

}

public int[] getData() {

return data;

}

public void setData(int[] data) {

this.data = data;

}

public int getDigit() {

return digit;

}

public void setDigit(int digit) {

this.digit = digit;

}

//構造方法

public BigInt(){};

public BigInt(String str_data)

{

this.setData_str(str_data);

}

//基本操作

/**

* 形成大數 初始化

*/

public void initBInt()

{

this.setDigit( this.getData_str().length() );

this.data = new int[this.getDigit()];

//將字元組成的大數逆序放入int[] data中

for(int i = 0, j=this.getDigit() ; i

{

// 1104 --> data[0] = '4',data[1] = '0',data[2]=1, data[3]= '1'

this.data[i] = Integer.parseInt( this.getData_str().substring(j-1,j) );

}

}

/**

* 進行大數相加操作

*/

public void add( BigInt bint)

{

//this的位數大於bint的位數

if( this.getDigit() < bint.getDigit() )

{

int[] datatemp = this.getData();

this.setData( bint.getData());

bint.setData( datatemp);

this.setDigit(this.getData().length);

bint.setDigit(bint.getData().length);

}

//將短的那個先加完

int i =0;

for(; i

{

int tdata = 0;

//上次運算有進位

if( this.isCarry())

{

tdata = this.getData()[i] + bint.getData()[i] +1;

//取消進位標識

this.setCarry(false);

}

else tdata = this.getData()[i] + bint.getData()[i] ;

//本次結果無進位

if(tdata <10) this.data[i] = tdata;

//本次結果有進位

else if(tdata >=10)

{

this.data[i] = tdata -10;

this.setCarry(true);

}

} //短的那個加完了

//剩餘數的處理

for(;i

{

//有個進位的

if(this.isCarry())

{

int tdata = this.data[i]+1;

if(tdata >=10) this.data[i] = tdata -10;

else

{

this.data[i] = tdata;

this.setCarry(false);

}

}

}

//對最高位益處檢測

if(this.data[this.getDigit()-1] == 0)

{

int[] tdata = new int[this.getDigit()+1];

System.array(this.getData(), 0, tdata, 0, this.getDigit());

tdata[this.getDigit()] = 1;

this.setData(tdata);

}

}

}

其中代碼

//對最高位益處檢測

if(this.data[this.getDigit()-1] == 0)

{

int[] tdata = new int[this.getDigit()+1];

System.array(this.getData(), 0, tdata, 0, this.getDigit());

tdata[this.getDigit()] = 1;

this.setData(tdata);

}

④ java怎麼處理大數相加

package eshop.framework.util;

import java.math.BigDecimal;

public class AmountUtil {
// 默認除法運算精度
private static final int DEFAULT_DIV_SCALE = 2;

/**
* 提供精確的加法運算。
*
* @param v1
* @param v2
* @return 兩個參數的和
*/
public static double add(double v1, double v2) {
b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}

/**
* 提供精確的加法運算
*
* @param v1
* @param v2
* @return 兩個參數數學加和,以字元串格式返回
*/
public static String add(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.add(b2).toString();
}

/**
* 提供精確的減法運算。
*
* @param v1
* @param v2
* @return 兩個參數的差
*/
public static double subtract(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}

/**
* 提供精確的減法運算
*
* @param v1
* @param v2
* @return 兩個參數數學差,以字元串格式返回
*/
public static String subtract(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.subtract(b2).toString();
}

/**
* 提供精確的乘法運算。
*
* @param v1
* @param v2
* @return 兩個參數的積
*/
public static double multiply(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}

/**
* 提供精確的乘法運算
*
* @param v1
* @param v2
* @return 兩個參數的數學積,以字元串格式返回
*/
public static String multiply(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2).toString();
}

/**
* 提供(相對)精確的除法運算,當發生除不盡的情況時,精確到 小數點以後2位,以後的數字四捨五入,舍入模式採用ROUND_HALF_EVEN
*
* @param v1
* @param v2
* @return 兩個參數的商
*/
public static double divide(double v1, double v2) {
return divide(v1, v2, DEFAULT_DIV_SCALE);
}

/**
* 提供(相對)精確的除法運算。當發生除不盡的情況時,由scale參數指 定精度,以後的數字四捨五入。舍入模式採用ROUND_HALF_EVEN
*
* @param v1
* @param v2
* @param scale
* 表示需要精確到小數點以後幾位。
* @return 兩個參數的商
*/
public static double divide(double v1, double v2, int scale) {
return divide(v1, v2, scale, BigDecimal.ROUND_HALF_EVEN);
}

/**
* 提供(相對)精確的除法運算。當發生除不盡的情況時,由scale參數指 定精度,以後的數字四捨五入。舍入模式採用用戶指定舍入模式
*
* @param v1
* @param v2
* @param scale
* 表示需要精確到小數點以後幾位
* @param round_mode
* 表示用戶指定的舍入模式
* @return 兩個參數的商
*/
public static double divide(double v1, double v2, int scale, int round_mode) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, round_mode).doubleValue();
}

/**
* 提供(相對)精確的除法運算,當發生除不盡的情況時,精確到 小數點以後10位,以後的數字四捨五入,舍入模式採用ROUND_HALF_EVEN
*
* @param v1
* @param v2
* @return 兩個參數的商,以字元串格式返回
*/
public static String divide(String v1, String v2) {
return divide(v1, v2, DEFAULT_DIV_SCALE);
}

/**
* 提供(相對)精確的除法運算。當發生除不盡的情況時,由scale參數指 定精度,以後的數字四捨五入。舍入模式採用ROUND_HALF_EVEN
*
* @param v1
* @param v2
* @param scale
* 表示需要精確到小數點以後幾位
* @return 兩個參數的商,以字元串格式返回
*/
public static String divide(String v1, String v2, int scale) {
return divide(v1, v2, DEFAULT_DIV_SCALE, BigDecimal.ROUND_HALF_EVEN);
}

/**
* 提供(相對)精確的除法運算。當發生除不盡的情況時,由scale參數指 定精度,以後的數字四捨五入。舍入模式採用用戶指定舍入模式
*
* @param v1
* @param v2
* @param scale
* 表示需要精確到小數點以後幾位
* @param round_mode
* 表示用戶指定的舍入模式
* @return 兩個參數的商,以字元串格式返回
*/
public static String divide(String v1, String v2, int scale, int round_mode) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.divide(b2, scale, round_mode).toString();
}

/**
* 提供精確的小數位四捨五入處理,舍入模式採用ROUND_HALF_EVEN
*
* @param v
* 需要四捨五入的數字
* @param scale
* 小數點後保留幾位
* @return 四捨五入後的結果
*/
public static double round(double v, int scale) {
return round(v, scale, BigDecimal.ROUND_HALF_EVEN);
}

/**
* 提供精確的小數位四捨五入處理
*
* @param v
* 需要四捨五入的數字
* @param scale
* 小數點後保留幾位
* @param round_mode
* 指定的舍入模式
* @return 四捨五入後的結果
*/
public static double round(double v, int scale, int round_mode) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
return b.setScale(scale, round_mode).doubleValue();
}

/**
* 提供精確的小數位四捨五入處理,舍入模式採用ROUND_HALF_EVEN
*
* @param v
* 需要四捨五入的數字
* @param scale
* 小數點後保留幾位
* @return 四捨五入後的結果,以字元串格式返回
*/
public static String round(String v, int scale) {
return round(v, scale, BigDecimal.ROUND_HALF_EVEN);
}

/**
* 提供精確的小數位四捨五入處理
*
* @param v
* 需要四捨五入的數字
* @param scale
* 小數點後保留幾位
* @param round_mode
* 指定的舍入模式
* @return 四捨五入後的結果,以字元串格式返回
*/
public static String round(String v, int scale, int round_mode) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(v);
return b.setScale(scale, round_mode).toString();
}

public static String doubleToString(double num, int scale, int round_mode) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(num);
return b.setScale(scale, round_mode).toString();
}
}

⑤ java實現兩個大數字相加

特別大的整數可以用BigInteger來實現

要import包java.math.BigInteger

BigInteger a = new BigInteger(\"1111111111111111111\");
BigInteger b = new BigInteger(\"1111111111111111111\");
System.out.println(a.add(b));
更詳細可以查詢J2SE的文檔

⑥ 大數相加,進位問題!! java

for(int i = 0; i< maxLen ; i++){
int tempSum = a[i] + b[i];
sum[i] += tempSum%10;
int d = tempSum/10;
sum[i+1] += d;
}
寫的不對,進位進的方向都不對,應該從最後位開始加。太亂了,直接用Decimal類來做就可以了,沒必要那麼復雜。
格式可以用DecimalFormat類去做,查下API文檔就可以了。