郑州金水区网站建设,开发者应用,培训培训网站建设,商丘网站制作电话大数的#xff08;加减乘除#xff09;四则运算、阶乘运算。 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法。
重复了部分 19 课的代码。
1 文本格式
using System; using System.Linq; using System.Text; using System.Collections.Generic;
/// summary…
大数的加减乘除四则运算、阶乘运算。 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法。
重复了部分 19 课的代码。
1 文本格式
using System; using System.Linq; using System.Text; using System.Collections.Generic;
/// summary /// 大数的加减乘除四则运算、阶乘运算 /// 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法 /// /summary public static class BigInteger_Utility { /// summary /// 记录 加减乘除 的运算次数 /// /summary public static int[] operations { get; set; } new int[] { 0, 0, 0, 0 }; /// summary /// 《小白学程序》第十九课随机数Random第六随机生成任意长度的大数BigInteger /// 一般可将超过9位数的数字成为“大数”。 /// 两个大数之间的四则运算用于密码学、高精度计算等应用。 /// 位数很多的浮点数可转为大数再逆转即可。 /// /summary /// param namen/param /// returns/returns public static string rand(int n) { // 随机数发生器 Random rnd new Random(); StringBuilder sb new StringBuilder(); // 第一个数字不能为0故0-8之间的随机数 1 1-9 sb.Append((rnd.Next(9) 1).ToString()); // 后面 n-1 个数字为 0-9从 1 开始计数 for (int i 1; i n; i) { sb.Append((rnd.Next(10)).ToString()); } return sb.ToString(); } /// summary /// 字符串型的数字转为数组 /// 低位右在前比如 123 , n6 存为 3,2,1,_,_,_ /// n 可能大于 a 的长度剩余位置留出来用于 进位 等。 /// /summary /// param namea/param /// param namen最大位数后面留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 (a[i] -) continue; // 0 字符是最小的数字字符 // 数值 字符 - 0 d[j] a[i] - 0; } return d; } /// summary /// 数组型数字转为字符串型 /// 低位右在前比如 3,2,1,_,_,_ 转为 123, n6 /// 这是前面 string_to_digitals 的反向计算函数 /// n 可能大于 d 的长度剩余位置留出来用于 进位 等。 /// /summary /// param named/param /// returns/returns public static string digitals_to_string(int[] d) { int n d.Length; // 数字数组 d 含有一些无效的数组 // 因此先从最右段开始去除无效的位置 int k n - 1; //for (; (k 0) (d[k] 0); k--) ; 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 /// 《小白学程序》第二十课大数BigInteger的四则运算之一加法 /// 大数加法 c a b /// /summary /// param namea/param /// param nameb/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(); } int[] da string_to_digitals(a, n); int[] db string_to_digitals(b, n); // 从低位右往高位左相加 #if _ORIGINAL__ for (int i 0; i (n - 1); i) { da[i] db[i]; if (da[i] 9) { da[i] - 10; da[i 1] 1; } } return digitals_to_string(da); #else int[] dc new int[n]; Array.Copy(da, dc, n); for (int i 0; i (n - 1); i) { dc[i] dc[i] db[i]; if (dc[i] 9) { dc[i] - 10; dc[i 1] 1; } } return digitals_to_string(dc); #endif } } 2 代码格式
using System;
using System.Linq;
using System.Text;
using System.Collections.Generic;/// summary
/// 大数的加减乘除四则运算、阶乘运算
/// 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法
/// 除法运算为 Truffer 自创算法
/// /summary
public static class BigInteger_Utility
{/// summary/// 记录 加减乘除 的运算次数/// /summarypublic static int[] operations { get; set; } new int[] { 0, 0, 0, 0 };/// summary/// 《小白学程序》第十九课随机数Random第六随机生成任意长度的大数BigInteger/// 一般可将超过9位数的数字成为“大数”。/// 两个大数之间的四则运算用于密码学、高精度计算等应用。/// 位数很多的浮点数可转为大数再逆转即可。/// /summary/// param namen/param/// returns/returnspublic static string rand(int n){// 随机数发生器Random rnd new Random();StringBuilder sb new StringBuilder();// 第一个数字不能为0故0-8之间的随机数 1 1-9sb.Append((rnd.Next(9) 1).ToString());// 后面 n-1 个数字为 0-9从 1 开始计数for (int i 1; i n; i){sb.Append((rnd.Next(10)).ToString());}return sb.ToString();}/// summary/// 字符串型的数字转为数组/// 低位右在前比如 123 , n6 存为 3,2,1,_,_,_/// n 可能大于 a 的长度剩余位置留出来用于 进位 等。/// /summary/// param namea/param/// param namen最大位数后面留0/param/// returns/returnspublic 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 (a[i] -) continue;// 0 字符是最小的数字字符// 数值 字符 - 0 d[j] a[i] - 0;}return d;}/// summary/// 数组型数字转为字符串型/// 低位右在前比如 3,2,1,_,_,_ 转为 123, n6/// 这是前面 string_to_digitals 的反向计算函数/// n 可能大于 d 的长度剩余位置留出来用于 进位 等。/// /summary/// param named/param/// returns/returnspublic static string digitals_to_string(int[] d){int n d.Length;// 数字数组 d 含有一些无效的数组// 因此先从最右段开始去除无效的位置int k n - 1;//for (; (k 0) (d[k] 0); k--) ;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/// 《小白学程序》第二十课大数BigInteger的四则运算之一加法/// 大数加法 c a b/// /summary/// param namea/param/// param nameb/param/// returns/returnspublic 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();}int[] da string_to_digitals(a, n);int[] db string_to_digitals(b, n);// 从低位右往高位左相加
#if _ORIGINAL__for (int i 0; i (n - 1); i){da[i] db[i];if (da[i] 9){da[i] - 10;da[i 1] 1;}}return digitals_to_string(da);
#elseint[] dc new int[n];Array.Copy(da, dc, n);for (int i 0; i (n - 1); i){dc[i] dc[i] db[i];if (dc[i] 9){dc[i] - 10;dc[i 1] 1;}}return digitals_to_string(dc);
#endif}
}3 计算结果