在下面的代码中它应该乘以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