|
Large Integer sinfining qo‘llanilishi
|
bet | 81/131 | Sana | 16.06.2024 | Hajmi | 1,92 Mb. | | #264063 |
Bog'liq Tiplarni dinamik tarzdaLarge Integer sinfining qo‘llanilishi. Ko‘p sonli hisoblashlar standart maʻlumot turlarining cheklanishidan tashqariga chiqish, cheksiz katta sonlar bilan ishlash, hajmi faqat mashinaning hisoblash kuchi bilan cheklanadi. Bunga qanday erishish mumkin? Eng mantiqiy yo‘li massiv yozish va standart tip raqamlar izchil massiv uchun maxsus tarzda aylantirish.
Misol uchun, 123456789123456789 raqamini qanday saqlashingiz mumkin, u int tipiga mos kelmaydi. Uni qo‘yish uchun, int tipidagi massiv olish mumkin, arr[0] = 123456, arr[1] = 789123, arr[2] = 456789, bunday yozishni maxsus usullari deb bo‘ladi. Shuningdek, to‘g‘ri kiritilsa, qo‘shish, ayirish, ko‘paytirish va bo‘lish amallarini yozish mumkin.
Endi maxsus Bignumber sinfini amalga oshirishni boshlaymiz va qo‘shish, ayirish uchun. Bu sinf bilanishlashda izohlar bilan dastur fragmentini to‘liq keltirilgan. Dastur fragmentiga qarab izohlarni o‘qishingiz mumkin.
Katta sonni initsializasiya qilish. Quyidagicha kiritish ishlari sifatida Bignumber(string str) sinf konstruktori mavjud. Satrning oxiridan boshlab joriy uzunlikdagi substringlar tanlanadi, raqamlarga aylantiriladi va qismlar vektoriga beriladi. Satrda manfiy ishora bor-yo‘qligiga qarab sinfning boshqa xususiy sohasi initsializatsiya qilinadi. Baʻzan normallashtirishda ziddiyatlar bo‘lmasligi uchun sinfning barcha obʻyektlari uchun bir xil bo‘lgan statik doimiy maydon ishlatiladi.
Katta sonlarni qo‘shish. + operatorini qayta yuklaymiz, bu esa o‘z navbatida ikkita katta sonni qo‘shadigan _plus() usulini chaqiradi. Bundan tashqari, har ikki raqamlar qismlarini, massiv bir xil hajmli qilish kerak. Bundan keyin esa natijani _normalization() funksiyasi bilan normallashtiring.
Katta sonlarni ayirish. Chiqarish qo‘shish uchun xuddi shunday ishlaydi, — operatori qayta yuklanadi va _minus () usulidan foydalaniladi.
Katta son oqimga chiqarish. Chiqish << operatorini qayta yuklashdan kelib chiqadi, lekin chiqishning o‘zidan oldin sonni _normalization() funksiyasi normallashtirishi kerak. U barcha nol bo‘laklarni, bo‘laklardagi manfiy sonlarni tozalab, sonni oqimga berishi kerak.
|
| |