gpt4 book ai didi

c# - 未处理 stackoverflow 异常

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:57 25 4
gpt4 key购买 nike

在下面的代码中,它应该乘以 2 个数字。它适用于 3 位和少于 3 位的数字,但是当我给出 4 位或更大的数字时,它会给出运行时错误:stackoverflow exception was unhandled。我已经评论了问题所在。我认为问题是在 int 中定义变量并在 long 中更改它们,但问题仍然存在。哪里错了?

编辑:现在,你怎么看待这个问题?它什么也没做

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

最佳答案

此时你正在进入一个无限递归循环

 long result = bigzarb(x, w) * Math.Pow(10, m) + (bigzarb(x, w) + bigzarb(w, y)) * Math.Pow(10, m) + bigzarb(y, z);///here
textBox1.Text = result.ToString();

我注意到这一行仅在 intn > 3 时执行,所以您可能有逻辑错误吗?

更新: 阅读您的评论后,我可以看出这个测试的目的是说“如果这个字符串的长度 <= 3 那么...”,而实际上它是这样写的说“如果这个转换后的字符串的值 <= 3 那么......”

关于c# - 未处理 stackoverflow 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4489987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com