अंकगणितीय ओवरफ्लो तब होता है जब कोई गणना, जैसे कोई अंकगणितीय ऑपरेशन या टाइप कन्वर्ज़न, ऐसी वैल्यू देती है जो प्राप्त करने वाले टाइप की क्षमता से बड़ी होती है।
int और long टाइप के एक्सप्रेशन और उनके unsigned समकक्ष ऐसी स्थितियों में चुपचाप रैप हो जाते हैं।
पूर्णांक गणनाओं का व्यवहार checked कीवर्ड का उपयोग करके बदला जा सकता है। जब किसी checked ब्लॉक के अंदर ओवरफ्लो होता है, तो OverflowException का एक इंस्टेंस फेंका जाता है।
int one = 1;
checked
{
int expr = int.MaxValue + one; // OverflowException is thrown
}
// or
int expr2 = checked(int.MaxValue + one); // OverflowException is thrown
float और double टाइप के एक्सप्रेशन अनंत की एक विशेष वैल्यू ले लेंगे।
decimal टाइप के एक्सप्रेशन OverflowException का एक इंस्टेंस फेंकेंगे।
Hyperia देश की अपनी समस्याएँ हैं। खास तौर पर, महँगाई नियंत्रण से बाहर हो चुकी है। आपको केंद्रीय बैंक में एक कॉन्ट्रैक्ट संभालने के लिए बुलाया गया है।
अंदरूनी कामकाज आसान बनाने के लिए केंद्रीय बैंक ने हर मूल्यवर्ग को दो हिस्सों में बाँट दिया है: एक आधार, जो लगभग नहीं बदलता, और एक गुणक (सभी मूल्यवर्गों के लिए एक ही), जिसे साल में, हफ्ते में, या रोज़ भी बदला जा सकता है।
छपाई के समय बैंक नोटों पर लिखा मूल्यवर्ग आधार और गुणक का गुणनफल होता है।
जब यह व्यवस्था शुरू हुई, तब तक सबसे कम मूल्य वाले बैंक नोट का मूल्यवर्ग भी 10,000,000 हो चुका था। नीचे दी गई तालिका वह स्थिति दिखाती है (पहले 3 मूल्यवर्गों के लिए) जो व्यवस्था पहली बार शुरू होते समय थी। उसके बाद से स्थिति कहीं ज़्यादा बिगड़ चुकी है, और अब सिर्फ गुणक ही नहीं बदलता, आधार भी बदलता है।
| आधार | गुणक | मूल्यवर्ग |
|---|---|---|
| 10,000 | 1,000 | 10,000,000 |
| 50,000 | 1,000 | 50,000,000 |
| 100,000 | 1,000 | 100,000,000 |
| ... | 1,000 | ... |
संक्षेप में, इसका मतलब है कि मूल्यवर्ग = आधार * गुणक।
कृपया CentralBank.DisplayDenomination() मेथड बनाइए, जो आधार और गुणक लेता है और उनका गुणनफल एक स्ट्रिंग के रूप में लौटाता है (आधार * गुणक)। लौटाई गई संख्यात्मक स्ट्रिंग पर कोई फॉर्मेटिंग नहीं होनी चाहिए।
अगर गुणा करने पर ओवरफ्लो हो जाए, तो "*** Too Big ***" स्ट्रिंग लौटाई जानी चाहिए।
CentralBank.DisplayDenomination(10000L, 1000L);
// => "10000000"
CentralBank.DisplayDenomination(long.MaxValue / 2, 10000L);
// => "*** Too Big ***"
केंद्रीय बैंक अंदरूनी तौर पर GDP दर्ज करने के लिए भी वही गुणक वाला तरीका अपनाता है। आँकड़े आधार मूल्यवर्ग में दर्ज किए जाते हैं और फिर गुणक से बढ़ा दिए जाते हैं।
कृपया CentralBank.DisplayGDP() मेथड बनाइए, जो आधार GDP और मौजूदा गुणक लेता है और GDP को एक स्ट्रिंग के रूप में लौटाता है।
अगर GDP की गणना नहीं हो पाती, तो "*** Too Big ***" लौटाया जाता है।
CentralBank.DisplayGDP(555f, 10000f);
// => "5550000"
CentralBank.DisplayGDP(float.MaxValue / 2, 10000f);
// => "*** Too Big ***"
बैंक में आपका बॉस यह पक्का करना चाहता है कि वेतन देने के समय कोई दिक्कत न हो।
CentralBank.DisplayChiefEconomistSalary() मेथड बनाइए, जो आधार इकाइयों में दर्शाया गया वेतन (ऊपर की तरह) और एक गुणक लेता है और उनका गुणनफल एक स्ट्रिंग में लौटाता है।
अगर वेतन की गणना नहीं हो पाती, तो "*** Much Too Big ***" लौटाया जाता है।
CentralBank.DisplayChiefEconomistSalary(555000m, 10000m);
// => "5550000000"
CentralBank.DisplayChiefEconomistSalary(555000m, decimal.MaxValue / 2L);
// => "*** Much Too Big ***"
Exercism पर साइन अप कीजिए और C# को 62 कॉन्सेप्ट178 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।