// ARITHMETICS BigNumber BigNumber::addPositiveBigNumber(BigNumber b) { BigNumber minBN; BigNumber maxBN; BigNumber result; if(*this > b) { minBN = b; maxBN = *this; } else { minBN = *this; maxBN = b; } minBN.addZerosInfront(maxBN.length() - minBN.length()); /* 1 + 1 = 2 : plusOne = 0; 5 + 5 = 0 : plusOne = 1; */ int plusOne = 0; int i = 0; while(i < maxBN.length()) { int temp = plusOne + maxBN[maxBN.length() - 1 - i] + minBN[minBN.length() - 1 - i]; if(temp > 9) { temp %= 10; plusOne = 1; } else plusOne = 0; result.addSymbolInfront(intToString(temp)); i++; } if(plusOne == 1) result.addSymbolInfront("1"); result.removeFrontZeroes(); return result; }
BigNumber BigNumber::subsractPositiveBigNumber(BigNumber b) { BigNumber minBN; BigNumber maxBN; BigNumber result; bool isNegative; if(*this >= b) { minBN = b; maxBN = *this; isNegative = false; } else { minBN = *this; maxBN = b; isNegative = true; } minBN.addZerosInfront(maxBN.length() - minBN.length()); int minusOne = 0; // SIMILAR TO PLUSONE int i = 0; while(i < maxBN.length()) { int temp = 10 + maxBN[maxBN.length()- 1 - i] - minusOne - minBN[minBN.length()- 1 - i]; if(temp > 9) minusOne = 0; else minusOne = 1; temp %= 10; result.addSymbolInfront(intToString(temp)); i++; } result.removeFrontZeroes(); if(isNegative) result.addSymbolInfront("-"); return result; }