Create a class HugeInteger which uses a 40-element array of digits to store inte
ID: 664342 • Letter: C
Question
Create a class HugeInteger which uses a 40-element array of digits to store integers as large as 40 digits each. Provide methods Input, ToString, Add and Subtract. For comparing HugeInteger objects, provide the following methods: IsEqualTo, IsNotEqualTo, IsGrea- terThan, IsLessThan, IsGreaterThanOrEqualTo and IsLessThanOrEqualTo. Each of these is a meth- od that returns true if the relationship holds between the two HugeInteger objects and returns false if the relationship does not hold. Provide method IsZero. If you feel ambitious, also provide methods Multiply, Divide and Remainder. In the Input method, use the string method ToChar- Array to convert the input string into an array of characters, then iterate through these characters to create your HugeInteger. [Note: The .NET Framework Class Library includes type BigInteger for arbitrary sized integer values.]
I need this in C#. Output gonna looks like this.
Explanation / Answer
using System;
using System.Collections.Generic;
namespace HugeInteger
{
internal class HugeInteger
{
//declaring variables
internal const int DigitArray = 40;
internal bool IsPositive;
internal readonly int[] Integer;
// declaring integer function
internal HugeInteger()
{
Integer = new int[DigitArray];
IsPositive = true;
}
// function converting to string
internal void Convert(String input)
{
var charArray = input.ToCharArray();
if (charArray[0] == '-')
IsPositive = false;
if (IsPositive)
if (Integer != null)
if (Integer.Length > DigitArray - charArray.Length)
Integer[DigitArray - charArray.Length] =
charArray[0] - '0';
for (var i = 1; i < charArray.Length; i++)
if (Integer != null &&
Integer.Length > DigitArray - charArray.Length + i)
Integer[DigitArray - charArray.Length + i] =
charArray[i] - '0';
}
// adding two integer
internal HugeInteger Add(HugeInteger val)
{
var sum = new HugeInteger();
if (IsPositive == val.IsPositive)
sum = PositiveAdd(val);
else if (IsPositive && (!val.IsPositive))
{
val.IsPositive = true;
if (IsGreaterThan(val))
sum = PositiveSubtract(val);
else
{
sum = val.PositiveSubtract(this);
sum.IsPositive = false;
}
val.IsPositive = false;
}
else if (!IsPositive && val.IsPositive)
{
val.IsPositive = false;
if (IsGreaterThan(val))
sum = val.PositiveSubtract(this);
else
{
sum = PositiveSubtract(val);
sum.IsPositive = false;
}
val.IsPositive = true;
}
return sum;
}
// adding two positive integer
internal HugeInteger PositiveAdd(HugeInteger val)
{
var sum = new HugeInteger();
var carryover = 0;
for (var i = 39; i >= 0; i--)
{
sum.Integer[i] =
Integer[i] + val.Integer[i] + carryover;
if (sum.Integer[i] > 9)
{
sum.Integer[i] %= 10;
carryover = 1;
}
else
carryover = 0;
}
if (!IsPositive)
sum.IsPositive = false;
return sum;
}
//subtracting two integer values
internal HugeInteger Subtract(HugeInteger val)
{
HugeInteger difference;
if (IsPositive && (!val.IsPositive))
difference = PositiveAdd(val);
else if (!IsPositive && val.IsPositive)
difference = PositiveAdd(val);
else
{
var positive = IsPositive;
var result = IsPositive;
IsPositive = true;
val.IsPositive = true;
if (IsGreaterThan(val))
difference = PositiveSubtract(val);
else
{
difference = val.PositiveSubtract(this);
result = !positive;
}
IsPositive = positive;
val.IsPositive = positive;
difference.IsPositive = result;
}
return difference;
}
// subtracting two positive integer
internal HugeInteger PositiveSubtract(HugeInteger val)
{
var difference = new HugeInteger();
for (var i = 39; i >= 0; i--)
{
if (Integer[i] < val.Integer[i])
{
Integer[i] += 10;
val.Integer[i - 1]--;
}
difference.Integer[i] = Integer[i] - val.Integer[i];
}
return difference;
}
// finding non zero position
internal int FindFirstNonZeroPosition()
{
const int position = 39;
for (var i = 0; i < DigitArray; i++)
if (Integer[i] > 0)
return i;
return position;
}
// convert to string values
public override String ToString()
{
var output = "";
if (!IsPositive)
output = "-";
for (var i = FindFirstNonZeroPosition(); i < DigitArray; i++)
output += Integer[i];
return output;
}
// If the value is equal to integer then it wil true otherwise false
internal bool IsEqualTo(HugeInteger val)
{
if (IsPositive != val.IsPositive)
return false;
for (var i = 0; i < DigitArray; i++)
if (Integer[i] != val.Integer[i])
return false;
return true;
}
// If the value is not equal to integer then it wil true otherwise false
internal bool IsNotEqualTo(HugeInteger val)
{
return !IsEqualTo(val);
}
// If the value is greater than integer then it wil true otherwise false
internal bool IsGreaterThan(HugeInteger val)
{
if (IsPositive && (!val.IsPositive))
return true;
if (!IsPositive && val.IsPositive)
return false;
if (FindFirstNonZeroPosition() >
val.FindFirstNonZeroPosition())
return !IsPositive;
if (FindFirstNonZeroPosition() <
val.FindFirstNonZeroPosition())
return IsPositive;
for (var i = 0; i < DigitArray; i++)
{
if (Integer[i] > val.Integer[i])
return IsPositive;
if (Integer[i] < val.Integer[i])
return !IsPositive;
}
return false;
}
// If the value is less than integer then it wil true otherwise false
internal bool IsLessThan(HugeInteger val)
{
return !(IsGreaterThan(val) ||
IsEqualTo(val));
}
// If the value is greater than or equal to then it wil true otherwise false
internal bool IsGreaterThanOrEqualTo(HugeInteger val)
{
return !IsLessThan(val);
}
// If the value is less than or equal to then it wil true otherwise false
internal bool IsLessThanOrEqualTo(HugeInteger val)
{
return !IsGreaterThan(val);
}
// If the value is equal to zero then it wil true otherwise false
internal bool IsZero()
{
for (var i = 0; i < DigitArray; i++)
if (Integer[i] != 0)
return false;
return true;
}
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.