خوب حالا باید واسه این کار الگوریتم معرفی کنیم.
این الگوریتم رو من ننوشتم. ولی واقعا سرعت خوبی داره. گرچه هنوز جا واسه کار داره و سرعتش به اندازه ای که انتظار میره بالا نیست. با این الگوریتم مقدار 1000 فاکتوریل در 8 ثانیه به دست میاد.
توجه کنید که آرگومان ها به صورت رشته هستند. مقدار loop هم مشخصه واسه به دست آوردن تعداد حلقه های برنامه هست.
کد:int loop = 0; private string Multiply(string a1, string a2) { int tmp1 = 0; int hafeze = 0; long maxL = 0; long sabet = 100000; string[] sum = new string[sabet]; for (int i = 1; i <= a2.Length; i++) { for (int i2 = 1; i2 <= a1.Length; i2++) { tmp1 = int.Parse(a2.Substring(int.Parse((a2.Length - i).ToString()), 1)) * int.Parse(a1.Substring(int.Parse((a1.Length - i2).ToString()), 1)); tmp1 += hafeze; hafeze = 0; if (tmp1 < 10) { if (sum[i - 1] == null) sum[i - 1] = ""; sum[i - 1] = sum[i - 1].Insert(0, tmp1.ToString()); } else { if (i2 == a1.Length) { if (sum[i - 1] == null) sum[i - 1] = ""; sum[i - 1] = sum[i - 1].Insert(0, tmp1.ToString()); } else { if (sum[i - 1] == null) sum[i - 1] = ""; sum[i - 1] = sum[i - 1].Insert(0, (tmp1 % 10).ToString()); hafeze = tmp1 / 10; } } loop++; } //if (sum[i - 1].Length > maxL) maxL = sum[i - 1].Length; } //----------------------------------------------------------------------00000000000000000 string c = "0"; for (long i = 1; i < a2.Length; i++) { sum[i] += c; c += "0"; loop++; } //----------------------------------------------------------------------00000000000000000 for (long i = 0; i < sabet; i++) { if (sum[i] != null) { if (sum[i].Length > maxL) maxL = sum[i].Length; } loop++; } //---------------------------------------------------------------------- string value = ""; for (int i = 1; i <= maxL; i++) { tmp1 = 0; for (int i2 = 1; i2 < a2.Length + 1; i2++) { if (sum[i] != "") { if (sum[i2 - 1].Length - i >= 0) tmp1 += int.Parse(sum[i2 - 1].Substring(sum[i2 - 1].Length - i, 1)); tmp1 += hafeze; hafeze = 0; } loop++; } if (tmp1 < 10) { value = value.Insert(0, tmp1.ToString()); } else { if (i == maxL) { value = value.Insert(0, tmp1.ToString()); } else { value = value.Insert(0, (tmp1 % 10).ToString()); hafeze = tmp1 / 10; } } loop++; } //---------------------------------------------------------------------- return value; }







پاسخ با نقل قول
Bookmarks