مسیرها
/
C#
C#
/
تمرین‌ها
/
ابرق تورم به هایپریا می‌رسد
ابرق تورم به هایپریا می‌رسد

ابرق تورم به هایپریا می‌رسد

تمرین یادگیری

مقدمه

سرریز

«سرریز محاسباتی» زمانی رخ می‌دهد که نتیجه‌ی یک محاسبه، مانند یک عملیات حسابی یا یک تبدیل نوع، مقداری بزرگ‌تر از ظرفیت نوع دریافت‌کننده باشد.

عبارت‌هایی از نوع int و long و معادل‌های بدون علامت‌شان در چنین شرایطی بی‌صدا دور می‌زنند.

رفتار محاسبات روی اعداد صحیح را می‌توان با استفاده از کلیدواژه‌ی 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 را پرتاب می‌کنند.

دستورالعمل‌ها

کشور هایپریا مشکلات خاص خود را دارد. به‌ویژه اینکه تورم از کنترل خارج شده است. شما را به بانک مرکزی آورده‌اند تا قراردادی را بر عهده بگیرید.

1. چاپ ارزش اسمی اسکناس‌ها

بانک مرکزی برای ساده‌تر کردن امور اداری داخلی، هر ارزش اسمی را به بخش‌هایی تقسیم کرده است: یک پایه که نسبتاً بدون تغییر می‌ماند و یک ضریب (یکسان برای همه‌ی ارزش‌های اسمی) که می‌تواند سالانه یا هفتگی یا حتی روزانه تغییر کند.

ارزش اسمی‌ای که هنگام چاپ روی اسکناس‌ها می‌آید، حاصل‌ضرب پایه در ضریب است.

تا زمانی که این سیستم معرفی شد، کم‌ترین ارزش اسمی اسکناس‌ها هم ۱۰٬۰۰۰٬۰۰۰ بود. جدول زیر وضعیت را (برای ۳ ارزش اسمی اول) در زمان معرفی سیستم نشان می‌دهد. از آن زمان اوضاع بسیار بدتر شده است و نه‌تنها ضریب تغییر می‌کند، بلکه پایه هم تغییر می‌کند.

پایه ضریب ارزش اسمی
۱۰٬۰۰۰ ۱٬۰۰۰ ۱۰٬۰۰۰٬۰۰۰
۵۰٬۰۰۰ ۱٬۰۰۰ ۵۰٬۰۰۰٬۰۰۰
۱۰۰٬۰۰۰ ۱٬۰۰۰ ۱۰۰٬۰۰۰٬۰۰۰
... ۱٬۰۰۰ ...

به‌طور خلاصه، این یعنی ارزش اسمی = پایه * ضریب.

لطفاً متد CentralBank.DisplayDenomination() را پیاده‌سازی کنید که پایه و ضریب را می‌گیرد و رشته‌ای از حاصل‌ضرب آن‌ها (پایه * ضریب) را برمی‌گرداند. رشته‌ی عددی برگردانده‌شده نباید قالب‌بندی شود.

اگر عمل ضرب باعث سرریز شود، باید رشته‌ی "*** Too Big ***" برگردانده شود.

CentralBank.DisplayDenomination(10000L, 1000L);
// => "10000000"
CentralBank.DisplayDenomination(long.MaxValue / 2, 10000L);
// => "*** Too Big ***"

2. نمایش تولید ناخالص داخلی هایپریا

بانک مرکزی برای ثبت تولید ناخالص داخلی در داخل هم از همان روش ضریب استفاده می‌کند. آمارها با یک ارزش اسمی پایه ثبت می‌شوند و سپس با ضریب بزرگ می‌شوند.

لطفاً متد CentralBank.DisplayGDP() را پیاده‌سازی کنید که تولید ناخالص داخلی پایه و ضریب فعلی را می‌گیرد و تولید ناخالص داخلی را به‌صورت رشته برمی‌گرداند.

اگر تولید ناخالص داخلی محاسبه‌شدنی نباشد، "*** Too Big ***" برگردانده می‌شود.

CentralBank.DisplayGDP(555f, 10000f);
// => "5550000"
CentralBank.DisplayGDP(float.MaxValue / 2, 10000f);
// => "*** Too Big ***"

3. نمایش حقوق اقتصاددان ارشد

رئیس شما در بانک می‌خواهد مطمئن شود که هنگام پرداخت حقوق مشکلی پیش نمی‌آید.

متد CentralBank.DisplayChiefEconomistSalary() را پیاده‌سازی کنید که حقوقی را که بر حسب واحدهای پایه بیان شده است (مانند بالا) و یک ضریب می‌گیرد و رشته‌ای حاوی حاصل‌ضرب برمی‌گرداند.

اگر حقوق محاسبه‌شدنی نباشد، "*** Much Too Big ***" برگردانده می‌شود.

CentralBank.DisplayChiefEconomistSalary(555000m, 10000m);
// => "5550000000"
CentralBank.DisplayChiefEconomistSalary(555000m, decimal.MaxValue / 2L);
// => "*** Much Too Big ***"
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
C# Exercism

آماده‌اید ابرق تورم به هایپریا می‌رسد را شروع کنید؟

در Exercism ثبت‌نام کنید تا C# را همراه با 62 مفهوم178 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.