[問題] 1.0 * -1.0 = 1.0?

看板C_and_CPP (C/C++)作者 (你真是糟糕的小焰)時間1天前 (2025/04/02 15:06), 1天前編輯推噓3(307)
留言10則, 3人參與, 18小時前最新討論串1/1
開發平台(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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.45.59 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1743577567.A.BA6.html ※ 編輯: handofn0xus (220.130.45.59 臺灣), 04/02/2025 15:11:54

04/02 18:48, 1天前 , 1F
看起來是倒數3*倒數4=末項沒錯呀
04/02 18:48, 1F

04/02 18:49, 1天前 , 2F
1*-1=-1
04/02 18:49, 2F

04/02 18:50, 1天前 , 3F
變數名稱跟印的項目太多太雜了先印關心的項目就好,或是
04/02 18:50, 3F

04/02 18:50, 1天前 , 4F
分開幾行印
04/02 18:50, 4F

04/02 22:35, 21小時前 , 5F
你是倒數4 * 3 =倒數1吧...
04/02 22:35, 5F

04/02 22:36, 21小時前 , 6F
然後你用改過的變數再算一次乘法印出來不是很奇怪
04/02 22:36, 6F

04/03 01:02, 18小時前 , 7F
idx1 ==0 ,loop == loopVal == 2
04/03 01:02, 7F

04/03 01:02, 18小時前 , 8F
所以eq[idx1][loop]和eq[idx1][loopVal]都是eq[0][2]
04/03 01:02, 8F

04/03 01:02, 18小時前 , 9F
因此,這個iteration中,set eq[idx1][loopVal]相當於set
04/03 01:02, 9F

04/03 01:02, 18小時前 , 10F
eq[idx1][loop]
04/03 01:02, 10F
文章代碼(AID): #1dxE7Vkc (C_and_CPP)
文章代碼(AID): #1dxE7Vkc (C_and_CPP)