心得 大數的加減乘除運算

2021-08-21 15:38:25 字數 2247 閱讀 9404

相加比較簡單, 以加法豎式的方式進行相加即可.

在相減中遇到乙個多次借位的問題, 如: 100, 000, 002 - 989 ; 由於0沒有數, 要一直往上借位, 直到借到位為止. 該怎麼解決?

1). 當第一次借位時, 判斷下一位是否為0; 

2). 因為借位每一位最多借1, 那麼被減數直接設定為9(已知被借位的數是0, 10 - 1 = 9), 設定完繼續判斷下一位是否還為0, 如果是0就繼續設定.

4). 如果上乙個數是否為0, 那麼被減數自減1, 然後設定為false.

while (!linkfirst.empty())  catch (nullpointerexception e) 

borrow = 0;

if (lastiszero)

if (iszero) else

}if (subtracted - subtraction < 0)

if (borrow == 1)

}linkresult.add(subtracted - subtraction);

}

以乘法豎式方式計算,  使被乘數 乘以 乘數的每一位, 保留到乙個鍊錶當中, 再對鍊錶進行求和.

1). 例如: 989 / 120 = ?

2). 120 * 2 = 240; 240 * 2 = 480; 480 * 2 = 960; 960 * 2 = 1920;

3). 2 是可調整的, 可以是3,4,5....  也可以是10及更大的數.

4). 再用 1920 - 120 = 1800 .....  

5). 這樣可以得出商, 以及餘數, 返回餘數, 再用餘數 / 120, 這樣可以精確到小數點位.

[2, 4 可以調整, 我試過100位數除以10位數, 如果是 * 2, 和減去 120, 非常慢; 在這裡可以適當的優化調整. ]

private string division(string divided, string divisor)  else 

}string quotient = "1";

string original = divisor;

while (comparison(divided, divisor).equals(utils.comparisionenum.morethan))

while (comparison(divided, divisor).equals(utils.comparisionenum.lessthan))

string remainder = new subtraction().calculation(divided, divisor);

remainder = getnocomma(remainder);

remainder = checkzero(remainder); // 去掉開頭的0

system.out.println();

system.out.println("+******************************====+");

system.out.println("divided: " + divided);

system.out.println("divisor: " + divisor);

system.out.println("remainder: " + remainder);

system.out.println("quotient: " + quotient);

system.out.println("+******************************====+");

result += quotient;

return remainder;

}// 判斷結果中是否又小數點

private boolean haspoint = false;

private void hasdecimalpoint()

}

寫在最後: 關於負數的四則運算, 前幾天也寫過, 但是在重構**時遇到問題, 所以今天寫的大數演算法就沒有寫負數的運算, 單個寫出來冗餘度比較高.

大數運算(加減乘除)

加法 void add char a,char b,char d for i len i 1 i if c i 48 len else break for i 0 i len i d i c len i view code 減法1 d2 d1,如果需要比較大小自己加乙個不麻煩。void dec ch...

大數運算 加減乘除

大數運算產生的原因就是因為int,double型別表示範圍都有限,無法表示過長的數字比如 2345468454567865415467864453437。因此也就無法進行四則運算,為了實現這種運算,大數運算產生了。其實也很簡單,既然基本資料型別放不下這些資料,那就用陣列存放唄。定義char c 10...

大數運算 (加減乘除)

大數加減乘除應該都不陌生了吧,原來只寫過大數加法,弱弱的我重溫了一下這種,發現還是蠻有意思的。不知道有沒有感覺到,解決這類問題進製思路都挺簡單的,主要錯的地方就是最後細節的處理,前導0的去除,型別轉換等之類的問題。都是按整數輸入資料 沒有考慮小數點之類的輸入和負數的情況。大數加法 hdu1002 l...