前几天一公司的面试题。感觉挺好玩,自己写了个,在这里记录下。
static string GetThree(string str1,string str2)
{
//取到最大数的位数长度
int MaxLength = str1.Length;
if (str2.Length > str1.Length)
{//最大数一定是str1,如果str2大 则交换两个数
string temp = str1;
str1 = str2;
str2 = temp;
MaxLength = str1.Length;
}
List<string[]> list = new List<string[]>();
for (int i = 0; i < MaxLength; i++)
{
string[] minStr = new string[str2.Length];//用一个小数位数的数组,放第一次乘完的结果集
for (int j = 0; j < str2.Length; j++)
{
minStr[j] = (Convert.ToInt32(str1[i].ToString()) * Convert.ToInt32(str2[j].ToString())).ToString();
}
Carry(minStr);//每一位相乘,结果如果为两位则进一
list.Add(minStr);
}
List<char[]> liststr = new List<char[]>();
int len = 0;
for (int i = 0; i < list.Count; i++)
{
string Oo = "";
for (int j = 0; j < list.Count - 1 - i; j++)
{
Oo += "0";
}
string Ss = "";
for (int j = 0; j < list[i].Length; j++)
{
Ss = Ss + list[i][j];
}
Ss = Ss + Oo;
if (Ss.Length > len)
{
len = Ss.Length;
}
else//把位数都整成一样的 这样以后算起来很方便
{
string temp = Ss; Ss = "";
for (int k = 0; k < len - temp.Length; k++)
{
Ss = Ss + "0";
}
Ss = Ss + temp;
}
char[] ch = MaketoCharArr(Ss);
liststr.Add(ch);
}
string[] sssss = new string[len];
for (int i = len - 1; i >= 0; i--)
{
int re = 0;
for (int j = 0; j < liststr.Count; j++)
{
re = re + Convert.ToInt32(liststr[j][i].ToString());
}
sssss[i] = re.ToString();
}
Carry(sssss);
StringBuilder sb = new StringBuilder();
foreach (var item in sssss)
{
sb.Append(item);
}
//Console.WriteLine(sb.ToString());
return sb.ToString();
}
static char[] MaketoCharArr(string str)
{
return str.ToCharArray();
}
/// <summary>
/// 进位的方法
/// </summary>
static void Carry(string[] strs)
{
for (int i = strs.Length-1; i > 0; i--)
{
if (strs[i].Length > 1)
{
string s = strs[i].Substring(0, strs[i].Length-1);
strs[i - 1] = (Convert.ToInt32(strs[i - 1]) + Convert.ToInt32(s)).ToString();
strs[i] = strs[i].Substring(strs[i].Length - 1, 1);
}
}
}
最后测试的时候调用一下GetThree方法,传入两个参数就行了。
string str1 = "182873747483838774387645732424723749826457624832718287374748383877438764573242472374982645762483274837
47325749271828737474838387743876457324247237498264576248327483747325749271828737474838387743876457324247237498264
57624832748374732574927182873747483838774387645732424723749826457624832748374732574927182873747483838774387645732
42472374982645762483274837473257492748374732574927";
string str2 = "74583856237548756270421794528358901284901828737474838387743876457324247237498264576248327483747325749271828737474
838387743876457324247237498264576248327483747325749271828737474838387743876457324247237498264576248327483747325749
271828737474838387743876457324247237498264576248327483747325749271828737474838387743876457324247237498264576248327
48374732574927754762893742839032893474837583287";
string s = GetThree(str1,str2);

浙公网安备 33010602011771号