using System;
using System.Collections.Generic;
using System.Text;
namespace Numbers
{
public class Number
{
public static bool IsInteger(string valueStr)
{
char[] ch1 = valueStr.ToCharArray();
foreach (char t in ch1)
{
if (!char.IsDigit(t)) return false;
}
if (ch1.Length == 0) return true;
return true;
}
public static string GetMutipul(string strFirst, string strSec)
{
if (!IsInteger(strFirst) || !IsInteger(strSec)) return "Not a number!";
char[] m1 = strFirst.Trim().ToCharArray();
char[] m2 = strSec.Trim().ToCharArray();
int[] arr1 = new int[m1.Length];
int[] arr2 = new int[m2.Length];
GetDigit(m1, m2, arr1, arr2);
return Mutipul(arr1, arr2);
}
public static string Mutipul(int[] intFirst, int[] intSecond)
{
int[] result = new int[intFirst.Length + intSecond.Length];
int pre = 0;
int curr = 0;
int start = 0;
string str = "";
for (int i = 0; i < result.Length; i++)
{
result[i] = 0;
}
for (int i = intFirst.Length - 1; i >= 0; i--)
{
pre = 0;
curr = 0;
start = intFirst.Length - 1 - i;
for (int j = intSecond.Length - 1; j >= 0; j--)
{
curr = intFirst[i] * intSecond[j] + result[start] + pre;
result[start] = curr % 10;
pre = (curr - curr % 10) / 10;
start = start + 1;
}
if (pre != 0)
{
result[start] = pre;
}
}
if (result[start] == 0) start = start - 1;
for (int j = start; j >= 0; j--)
{
str += result[j] + "";
}
return str;
}
public static void GetDigit(char[] chFirst, char[] chSecond, int[] intFirst, int[] intSecond)
{
for (int i = 0; i < chFirst.Length; i++)
{
intFirst[i] = chFirst[i] - '0';
}
for (int i = 0; i < chSecond.Length; i++)
{
intSecond[i] = chSecond[i] - '0';
}
}
public static string GetMinTwo(string First, string Second)
{
if (!IsInteger(First) || !IsInteger(Second)) return "Not a number!";
char[] m1 = First.Trim().ToCharArray();
char[] m2 = Second.Trim().ToCharArray();
int[] arr1 = new int[m1.Length];
int[] arr2 = new int[m2.Length];
if (First.Trim() == Second.Trim()) return "0";
GetDigit(m1, m2, arr1, arr2);
bool flag = IsPos(arr1, arr2);
if (!flag) return ("-"+MinTwo(arr2,arr1));
else return MinTwo(arr1, arr2);
}
public static bool IsPos(int[] arr1, int[] arr2)
{
int len1=arr1.Length;
int len2=arr2.Length;
if (len1 > len2) return true;
else if (len1 < len2) return false;
else {
for (int i = 0; i <len1; i++)
{
if (arr1[i] > arr2[i]) return true;
else if (arr1[i] < arr2[i]) return false;
}
return true;
}
}
public static string MinTwo(int[] intFirst, int[] intSec)
{
int pre = 0;
string str = "";
int[] result=intFirst;
int pos = 0;
for (int i = intSec.Length - 1,j=intFirst.Length-1; i >= 0; j--,i--)
{
pos = j;
if (intFirst[j] - pre >= intSec[i])
{
result[j] = intFirst[j] - intSec[i];
pre = 0;
}
else {
result[j] = intFirst[j] - intSec[i]+10-pre;
pre = 1;
}
}
if (pre != 0)
{
for (int j = pos; j >= 0; j--)
{
if (result[j] - pre >= 0) { result[j] = result[j] - pre; break; }
}
}
bool flag=true;
foreach (int t in result)
{
if(flag){
if (t != 0) {
str += t;
flag = false;
}
}
else str += t;
}
return str;
}
}
}
c#大数相乘
最新推荐文章于 2020-05-27 16:12:47 发布