blob: 658ce14b971ab1e0a736331eb7783ef3528906d0 (
plain)
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
LInfiniteInteger thattemp = new LInfiniteInteger(anInfiniteInteger.toString());
thattemp.isNegative = false;
thistemp.isNegative = false;
if(thattemp.compareTo(thistemp) > 0)
{
negateAtEnd = true;
}
System.out.println("[ME] Attempting to detect if final answer should be negitive: " + negateAtEnd + " : " + thattemp.compareTo(thistemp) + " : When compareing " + thattemp.toString() + " with " + thistemp.toString());
//find the 9's complement of the this number
LInfiniteInteger ninesc = new LInfiniteInteger("");
Node thisnode = thistemp.lastNode;
Node thatnode = thattemp.lastNode;
while(thisnode != null || thatnode != null)
{
if(thatnode != null)
{
ninesc.addfirst(9-thatnode.data);
thatnode = thatnode.previous;
}
else
{
ninesc.addfirst(9);
}
if(thisnode != null)
{
thisnode = thisnode.previous;
}
}
ninesc.removeLast();
System.out.println("[ME] Calculated 9's complement: " + ninesc);
LInfiniteInteger answer =(LInfiniteInteger) ninesc.plus(thistemp);
answer = (LInfiniteInteger) answer.plus(new LInfiniteInteger(1));
//Remove carry
System.out.println("[ME] Answer's number of digits: " + answer.getNumberOfDigits() + " Ninesc's number of digits: " + ninesc.getNumberOfDigits());
if(answer.getNumberOfDigits() > ninesc.getNumberOfDigits())
{
answer.removeFirst();
}
System.out.println("[ME] 9's complement + other + 1 number = " + answer.toString());
ninesc = new LInfiniteInteger("");
for(Node tmp = answer.lastNode; tmp != null; tmp = tmp.previous)
{
ninesc.addfirst(9-tmp.data);
}
ninesc.removeLast();
System.out.println("[ME] After reverseing again, number = " + ninesc.toString());
answer = (LInfiniteInteger) ninesc.plus(new LInfiniteInteger(1));
//Remove leading 0's if nessessary
System.out.println("[ME] Answer's number of digits: " + answer.getNumberOfDigits() + "(" + answer.toString() +") Ninesc's number of digits: " + ninesc.getNumberOfDigits() + "(" + ninesc.toString() + ")");
if(answer.getNumberOfDigits() > ninesc.getNumberOfDigits())
{
answer.removeFirst();
}
for(Node tmp = answer.firstNode; tmp != null; tmp = tmp.next)
{
if(tmp.data == 0)
{
System.out.println("[ME] Removeing a leading 0");
answer.removeFirst();
}
else
{
break;
}
}
System.out.println("[ME] After removeing padded 0's number is " + answer.toString());
if(answer.firstNode == null)
{
answer.addfirst(0);
}
//If the final answer has no numbers, add a 0
answer.isNegative = negateAtEnd;
System.out.println("[ME] Reversed back, final answer is " + answer.toString());
return answer;
|