c# - अभिव्यक्ति का मूल्यांकन करते समय मुझे गलत परिणाम क्यों मिलता है?
(4)
आप जिस समस्या का सामना कर रहे हैं, वह ऑपरेटर पूर्वता के कारण है।
%
पहले से अधिक है, इसलिए आप वास्तव में अपनी अभिव्यक्ति के साथ क्या कर रहे हैं:
-
a.Max()
प्राप्त करें -
a.Sum() % 10
प्राप्त करें - उन्हें एक साथ जोड़ें
तो परिणाम 10 + 1 है, जो 11 है।
यदि आप केवल
a.Sum()
बजाय शेष जोड़ लेना
चाहते हैं
, तो आपको कोष्ठक का उपयोग करने की आवश्यकता है:
(a.Max() + a.Sum()) % 10
।
इससे मूल्यांकन में परिवर्तन होता है:
-
a.Max()
प्राप्त करें -
a.Sum()
प्राप्त करें - उन्हें एक साथ जोड़ें
- विभाजन के बाद शेष को 10 तक ले जाएं
उसी का परिणाम है 1।
int[] a = {5, 6, 10}
int n = a.Max() + a.Sum() % 10;
Console.Write(n);
कोड 11 को प्रिंट करता है, लेकिन मैं 1 की उम्मीद करूंगा क्योंकि 31% 10 = 1. क्या कोई समझा सकता है कि ऊपर दिया गया कोड अलग जवाब क्यों देता है?
आपको यहाँ BOD MAS नियम का उपयोग करना चाहिए। अधिकतम मान = 10, सभी संख्याओं का योग = 21, और फिर गणना मोड। तो समाधान होगा:
10 + 21 % 10
10 + 1 = 11
BOD MAS नियम के अनुसार।
इसे इस्तेमाल करे। यह सिर्फ बुनियादी गणितीय समूहीकरण मुद्दा है।
गुणा और भाग का मूल्यांकन अंतिम रूप से + या - के बाद किया जाएगा
int[] a = {5, 6, 10};
int n = (a.Max() + a.Sum()) % 10;
Console.Write(n);
जवाब 11 होना चाहिए क्योंकि:
int[] a = {5, 6, 10}
int n = a.Max() + a.Sum() % 10;
n = 10 + 21 % 10 ;
n = 10 + 1;
n = 11;
यदि आप चाहते हैं कि यह 1 हो तो आपको उचित कोष्ठक का उपयोग करना चाहिए, तभी यह गणना को प्राथमिकता देगा:
int[] a = {5, 6, 10}
int n = (a.Max() + a.Sum()) % 10;
n = (10 + 21) % 10 ;
n = 31 % 10 ;
n = 1;