Jacly  

前几天一公司的面试题。感觉挺好玩,自己写了个,在这里记录下。

        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);

posted on 2012-01-14 23:19  Jacly  阅读(212)  评论(0)    收藏  举报