summaryrefslogtreecommitdiff
path: root/projects/project2_LInfiniteInteger/InfiniteInteger y was constructed using the following statement
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;