1 文本格式
using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
/// <summary>
/// 大数的四则(加减乘除)运算
/// 及其运算符重载(取余数)
/// </summary>
public class BigNumber
{
private string Buffer { get; set; } = “”;
private string Sign { get; set; } = “”;
public BigNumber(int n) { Next(n); }
public BigNumber(string b, string s = “”)
{
Buffer = b;
Sign = s;
}
public BigNumber Clone()
{
BigNumber r = new BigNumber(Buffer, Sign);
return r;
}
public int Length { get { return Buffer.Length; } }
/// <summary>
/// 随机生成任意长度的大数(BigNumber)
/// </summary>
/// <param name=”n”>位数</param>
/// <returns></returns>
public void Next(int n)
{
Random rnd = new Random();
StringBuilder sb = new StringBuilder();
sb.Append((rnd.Next(9) + 1).ToString());
for (int i = 1; i < n; i++)
{
sb.Append((rnd.Next(10)).ToString());
}
Buffer = sb.ToString();
}
/// <summary>
/// 字符串型的数字转为数组(低位(右)在前)
/// </summary>
/// <param name=”a“></param>
/// <param name=”n”>最大位数,后面留0</param>
/// <returns></returns>
public static int[] string_to_digitals(string a, int n)
{
char[] c = a.ToCharArray();
int[] d = new int[n];
for (int i = a.Length – 1, j = 0; i >= 0; i–)
{
if (c[i] == ‘-‘) continue;
d[j++] = c[i] – ‘0’;
}
return d;
}
/// <summary>
/// 数组型数字转为字符串型(低位(右)在前)
/// </summary>
/// <param name=”d”></param>
/// <returns></returns>
public static string digitals_to_string(int[] d)
{
int n = d.Length;
int k = n – 1;
while ((k >= 0) && (d[k] == 0)) k–;
if (k >= 0)
{
StringBuilder sb = new StringBuilder();
for (; k >= 0; k–) sb.Append(d[k]);
return sb.ToString();
}
else
{
return “0”;
}
}
/// <summary>
/// 大数加法 c = a + b
/// </summary>
/// <param name=”a”></param>
/// <param name=”b”></param>
/// <returns></returns>
public static string big_integer_plus(string a, string b)
{
int n = Math.Max(a.Length, b.Length) + 1;
// 位数不长的数字直接计算
if (n <= 18)
{
return (ulong.Parse(a) + ulong.Parse(b)).ToString();
}