-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsubtract.ts
More file actions
41 lines (36 loc) · 918 Bytes
/
subtract.ts
File metadata and controls
41 lines (36 loc) · 918 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import {
addAbsolute,
compareAbsolute,
parseNumber,
subtractAbsolute,
} from "./utils";
export function subtract(left: string, right: string): string {
const num1 = parseNumber(left);
const num2 = parseNumber(right);
let resultSign = 1;
let result = "";
// If the signs are different, add them
if (num1.sign !== num2.sign) {
num2.sign = num1.sign;
result = addAbsolute(num1, num2);
resultSign = num1.sign;
} else {
// If the signs are the same, subtract them
let cmp = compareAbsolute(num1, num2);
if (cmp === 0) {
return "0";
} else if (cmp > 0) {
result = subtractAbsolute(num1, num2);
resultSign = num1.sign;
} else {
result = subtractAbsolute(num2, num1);
resultSign = -num1.sign;
}
}
if (result === "0") {
return "0";
} else {
return (resultSign === -1 ? "-" : "") + result;
}
}
export default subtract;