在下面的代碼中它應該乘以2個數字。它適用於3位和3位以下的數字,但當我給出4位數或更大的數字時,會產生運行時錯誤:stackoverflow exception was unhandled
。我已經評論了問題出在哪裏。我認爲問題是在int
中定義變量,並且長時間更改它們,但問題仍然存在。錯誤在哪裏?stackoverflow異常未處理
編輯: 現在,什麼你怎麼看待這個問題它沒有做任何事情
public long Prod2(long u, long v)
{
var numbers = textBox7.Text.Split(',').Select(p => long.Parse(p)).ToArray();
int n = Math.Max((int)Math.Floor(Math.Log10(u) + 1),(int)Math.Floor(Math.Log10(v) + 1));
int threshold = 3;
if (u == 0 || v == 0)
{
return 0;
}
else if (n <= threshold)
{
return u * v;
}
else
{
int m = (int)Math.Ceiling(n/2.0);
int x = (int)(u/Math.Pow(10, m));
int y = (int)(u % Math.Pow(10, m));
int w = (int)(u/Math.Pow(10, m));
int z = (int)(v % Math.Pow(10, m));
long r = Prod2(x + y, w + z);
long p = Prod2(x, w);
long q = Prod2(y, z);
return p * (long)Math.Pow(10, 2 * m) + (r - p - q) * (long)Math.Pow(10, m) + q;
long result = Prod2(numbers[0], numbers[1]);
textBox1.Text = result.ToString();
}
}
@arash - 如果你能解釋一下,我很樂意提供幫助*這種方法試圖做什麼*做*? – TheCloudlessSky 2010-12-20 13:35:16
m是一個3位數字? – mingos 2010-12-20 13:35:57
stackoverflow異常不是由算術運算引起的。這是因爲你的遞歸不會因爲某種原因而停止。 – nan 2010-12-20 13:39:22