class LargeNum
{
string numValue;
public int Length
{
get { return numValue.Length; }
}
/// <summary>
/// 获取和设置当前大数的制定位的数字值
/// </summary>
/// <param name="index">指定位的索引</param>
/// <returns>指定位的数值</returns>
public int this[int index]
{
get { return Convert.ToInt32(numValue[index].ToString()); }
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="numValue">大数的值</param>
public LargeNum(string numValue)
{
this.numValue = numValue;
}
/// <summary>
/// 计算两个指定大数的和
/// </summary>
/// <param name="num1">一个数</param>
/// <param name="num2">另一个数</param>
/// <returns></returns>
public static LargeNum operator +(LargeNum num1, LargeNum num2)
{
LargeNum numLong;
LargeNum numShort;
//根据两个数字的长度,分别设置为长的数和短的数
if (num1.Length < num2.Length)
{
numShort = num1;
numLong=num2;
}
else
{
numShort = num2;
numLong =num1 ;
}
int[] result = new int[numLong .Length+ 1];
//计算结果的后几位,从最后一位摆竖式开始算,计算到短的数那么多位
for (int i =numLong.Length;i> numLong.Length - numShort.Length; i--)
{
result[i] = numLong[i-1] + numShort[i - numLong.Length + numShort.Length-1]+result[i];
if (result[i] >= 10)
{
result[i-1] = 1;
result[i] = result[i] - 10;
}
}
//计算结果的前几位,把长的数剩下的几位加上
for (int i = numLong.Length - numShort.Length ; i >0; i--)
{
result[i] = numLong[i-1]+result[i];
if (result[i] >= 10)
{
result[i - 1] = 1;
result[i] = result[i] - 10;
}
}
return new LargeNum( ConvertIntArrayToString(result)/*将计算结果转换成字符串*/);//将计算结果转换成大数,返回
}
public override string ToString()
{
return numValue;
}
/// <summary>
/// 将指定的整型数组转换成字符串
/// </summary>
/// <param name="intArray">整型数组</param>
/// <returns>对应字符串,每个整数对应数组的一位</returns>
private static string ConvertIntArrayToString(int[] intArray)
{
string result="";
for (int i = 1; i < intArray.Length; i++)
{
result += intArray[i].ToString();
}
if (intArray[0] >0)
{
result =intArray[0]+ result;
}
return result;
}
}