开发平台(Platform): (Ex: Win10, Linux, ...)
Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Leetcode C++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
None
问题(Question):
目前正在写Leetcode 399. Evaluate Division
其中我正在计算非直接连接的两个节点它们的值
else if(eq[idx1][loopVal] == -1.0)
{
eq[idx1][loopVal] = eq[idx1][loop] * eq[loop][loopVal];
printf("%d %d %d %1.2f %1.2f %1.2f %1.2f\n", idx1, loopVal, loop,
eq[idx1][loop], eq[loop][loopVal],
eq[idx1][loopVal],eq[idx1][loop]*eq[loop][loopVal]);
eq[idx1][loopVal] = eq[idx1][loopVal] < 0? -1.0 : eq[idx1][loopVal];
}
但其中却发现output出现
0 2 2 1.00 -1.00 1.00 -1.00
倒数两个浮点数
前面是eq[idx1][loopVal]
后面是eq[idx1][loop]*eq[loop][loopVal]
而我printf上一行就是eq[idx1][loopVal] = eq[idx1][loop] * eq[loop][loopVal];
明明后面那个显示他乘出来确实是-1.0
结果放回eq[idx1][loopVal]就变成+1.0了??
完全理解不能 求解 感谢各位
预期的正确结果(Expected Output):
0 2 2 1.00 -1.00 -1.00 -1.00
错误结果(Wrong Output):
0 2 2 1.00 -1.00 1.00 -1.00
https://i.imgur.com/1FXNOLW.png
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
else if(eq[idx1][loopVal] == -1.0)
{
eq[idx1][loopVal] = eq[idx1][loop] * eq[loop][loopVal];
printf("%d %d %d %1.2f %1.2f %1.2f %1.2f\n", idx1, loopVal, loop,
eq[idx1][loop], eq[loop][loopVal],
eq[idx1][loopVal],eq[idx1][loop]*eq[loop][loopVal]);
eq[idx1][loopVal] = eq[idx1][loopVal] < 0? -1.0 : eq[idx1][loopVal];
}
https://pastebin.com/qrg9RE6U
作者: gusion 2025-04-03 01:02:00
idx1 ==0 ,loop == loopVal == 2所以eq[idx1][loop]和eq[idx1][loopVal]都是eq[0][2]因此,这个iteration中,set eq[idx1][loopVal]相当于seteq[idx1][loop]