文本文件1.txt和2.txt分别存储超长正整数,然后读取两个数进行加法、减法、乘法运算,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;
namespace count
{
class Program
{
public static StringBuilder a = new StringBuilder();
public static StringBuilder b = new StringBuilder();
static void Main(string[] args)
{
DateTime start = DateTime.Now;
//Plus();
//Reduce();
Multiply();
string end = DateTime.Now.Subtract(start).ToString();
File.WriteAllText("用时_lcl.txt", end, Encoding.Default);
}
/// <summary>
/// 文件处理
/// </summary>
/// <returns></returns>
public static StringBuilder[] FileOperation()
{
StringBuilder[] arr = new StringBuilder[2];
StringBuilder bu1 = new StringBuilder();
StringBuilder bu2 = new StringBuilder();
a.Append(File.ReadAllText("1.txt", Encoding.Default));
b.Append(File.ReadAllText("2.txt", Encoding.Default));
if (a.Length > b.Length)
{
int num = a.Length - b.Length;
for (int i = 0; i < num; i++)
{
bu2.Append('0');
}
}
if (a.Length < b.Length)
{
int num = b.Length - a.Length;
for (int i = 0; i < num; i++)
{
bu1.Append('0');
}
}
bu1.Append(a);
bu2.Append(b);
arr[0] = bu1;
arr[1] = bu2;
return arr;
}
/// <summary>
/// 加法
/// </summary>
public static void Plus()
{
StringBuilder[] arr = FileOperation();
int a = 0;
int b = 0;
int c = 0;
int count = 0;
StringBuilder PlusResult = new StringBuilder();
for (int i = arr[0].Length; i > 0; i--)
{
a = int.Parse(Convert.ToString(arr[0][i - 1]));
b = int.Parse(Convert.ToString(arr[1][i - 1]));
if (count == 1)
{
c = a + b + 1;
}
else
{
c = a + b;
count = 0;
}
if (c > 9)
{
if (i == 1)
{
PlusResult.Append(c);
}
else
{
PlusResult.Append(c % 10);
}
count = 1;
}
else
{
PlusResult.Append(c);
count = 0;
}
}
StringBuilder result = new StringBuilder();
for (int i = PlusResult.Length; i > 0; i--)
{
result.Append(PlusResult[i - 1]);
}
File.WriteAllText("加_lcl.txt", Convert.ToString(result), Encoding.Default);
}
/// <summary>
/// 减法
/// </summary>
public static void Reduce()
{
StringBuilder[] arr = FileOperation();
int a = 0;
int b = 0;
int c = 0;
int count = 0;
StringBuilder ReduceResult = new StringBuilder();
for (int i = arr[0].Length; i > 0; i--)
{
a = int.Parse(Convert.ToString(arr[0][i - 1]));
b = int.Parse(Convert.ToString(arr[1][i - 1]));
if (count == 1)
{
a = a - 1;
}
if (a - b < 0)
{
a = 10 + a;
c = a - b;
count = 1;
}
else
{
c = a - b;
count = 0;
}
ReduceResult.Append(c);
}
StringBuilder result = new StringBuilder();
for (int i = ReduceResult.Length; i > 0; i--)
{
result.Append(ReduceResult[i - 1]);
}
File.WriteAllText("减_lcl.txt", Convert.ToString(result), Encoding.Default);
}
/// <summary>
/// 乘法
/// </summary>
public static void Multiply()
{
StringBuilder one = new StringBuilder();
StringBuilder two = new StringBuilder();
one.Append(File.ReadAllText("1.txt", Encoding.Default));
two.Append(File.ReadAllText("2.txt", Encoding.Default));
int oneLength = one.Length;
int otherLength = two.Length;
int resultLength = oneLength + otherLength;
int[] oneNumbers = new int[oneLength];
int[] otherNumbers = new int[otherLength];
int[] resultNumbers = new int[resultLength];
for (int i = 0; i < oneLength; i++)
{
oneNumbers[i] = int.Parse(Convert.ToString(one[i]));
}
for (int i = 0; i < otherLength; i++)
{
otherNumbers[i] = int.Parse(Convert.ToString(two[i]));
}
for (int i = otherLength - 1; i >= 0; i--)
{
for (int j = oneLength - 1; j >= 0; j--)
{
//resultNumbers[i + j + 1] += int.Parse(Convert.ToString(two[i])) * int.Parse(Convert.ToString(one[j]));
//resultNumbers[i + j] += resultNumbers[i + j + 1] / 10;
//resultNumbers[i + j + 1] = resultNumbers[i + j + 1] % 10;
resultNumbers[i + j + 1] += otherNumbers[i] * oneNumbers[j];//得到乘积
resultNumbers[i + j] += resultNumbers[i + j + 1] / 10;//进位
resultNumbers[i + j + 1] = resultNumbers[i + j + 1] % 10;//取乘积的个位
}
}
StringBuilder builder = new StringBuilder();
for (int i = 0; i < resultLength; i++)
{
builder.Append(resultNumbers[i]);
}
string result = builder.ToString();
if (result.StartsWith("0"))
{
result = result.Substring(1);
}
File.WriteAllText("乘_lcl.txt", result.ToString(), Encoding.Default);
}
}
}