当要计算超大整数相乘的时候,超出来整型表示的范围,通过数组来实现。
static void Main(string[] args)
{
string n1="12345678901234567890";
string n2="1234";
string value = bigDataMulti(n1,n2);
Console.WriteLine(value);
}
static string bigDataMulti(string n1,string n2)
{
if(string.IsNullOrEmpty(n1) || string.IsNullOrEmpty(n2))
throw new Exception("无效参数");
n1 = reverse(n1);
n2 = reverse(n2);
int len1 = n1.Length;
int len2 = n2.Length;
StringBuilder tmp = new StringBuilder(len1+len2);
int [] arry = new int[len1+len2];
for(int i=0;i<len1;i++)
for(int j=0;j<len2;j++)
{
arry[i+j] +=Convert.ToInt32( n1[i].ToString()) * Convert.ToInt32( n2[j].ToString());
}
for(int k=0;k<len1 + len2;k++)
{
if(arry[k]>10)
{
arry[k+1] += arry[k]/10;
arry[k] = arry[k]%10;
}
tmp.Insert(0,arry[k].ToString());
}
string ret = tmp.ToString();
if(ret[0] == '0')
ret = ret.Substring(1);
return ret;
//Array.Reverse(arry);
//string ret= string.join("",arry);
//if(ret[0] == '0')
// ret = ret.Substring(1);
//return ret;
}
static string reverse(string str)
{
if(string.IsNullOrEmpty(str))
throw new Exception("空字符串");
int len= str.Length;
StringBuilder sb = new StringBuilder(len);
for(int i = len-1;i>=0;i--)
sb.Append(str[i].ToString());
return sb.ToString();
}
//另一种字符串反转方式
static string reverseStr(string str)
{
char[] arry = str.ToCharArray();
Array.Reverse(arry);
return new string(arry);
}