No history yet

BigInteger Basics

Juda Katta Sonlar Bilan Ishlash: BigInteger

Dasturlashda ba'zan biz standart ma'lumot turlarining imkoniyatlaridan tashqariga chiqadigan sonlar bilan ishlashimizga to'g'ri keladi. Masalan, Java'dagi long tipi o'zida saqlay oladigan maksimal qiymat 9,223,372,036,854,775,8079,223,372,036,854,775,807 ga teng. Bu juda katta son bo'lib tuyulishi mumkin, lekin kriptografiya, ilmiy hisob-kitoblar yoki moliyaviy tahlillarda bundan ham kattaroq sonlar bilan ishlash odatiy holdir.

Agar son long chegarasidan oshib ketsa nima bo'ladi? Dasturda xatolik yuz beradi yoki natija kutilmagan bo'ladi. Aynan shu kabi holatlar uchun Java'da BigInteger sinfi mavjud.

BigInteger sinfi java.math paketida joylashgan bo'lib, nazariy jihatdan cheksiz uzunlikdagi butun sonlarni ifodalash va ular ustida arifmetik amallarni bajarish imkonini beradi. Uning hajmi faqat kompyuterning mavjud xotirasi bilan cheklanadi.

BigInteger Obyektini Yaratish

BigInteger primitiv tur emas, balki sinf bo'lgani uchun biz uning obyektlarini yaratishimiz kerak. Eng keng tarqalgan usul – bu sonni matn (string) ko'rinishida konstruktorga uzatishdir.

import java.math.BigInteger;

public class Example {
    public static void main(String[] args) {
        // Katta sonni matn ko'rinishida berib, BigInteger obyekti yaratish
        BigInteger kattaSon1 = new BigInteger("123456789012345678901234567890");

        // Boshqa bir katta son
        BigInteger kattaSon2 = new BigInteger("987654321098765432109876543210");

        System.out.println("Birinchi son: " + kattaSon1);
        System.out.println("Ikkinchi son: " + kattaSon2);
    }
}

Bundan tashqari, BigInteger sinfida tez-tez ishlatiladigan qiymatlar uchun oldindan tayyorlangan konstantalar mavjud. Bu kodni qisqaroq va tushunarliroq qiladi.

KonstantaQiymati
BigInteger.ZERO0
BigInteger.ONE1
BigInteger.TEN10
BigInteger.TWO2

Masalan, new BigInteger("1") o'rniga BigInteger.ONE dan foydalanish mumkin.

Asosiy Arifmetik Amallar

BigInteger obyektlari o'zgarmas (immutable) hisoblanadi. Bu shuni anglatadiki, biror arifmetik amal bajarilganda asl obyekt o'zgarmaydi, balki natijani o'zida saqlaydigan yangi BigInteger obyekti qaytariladi.

+, -, *, / kabi standart arifmetik operatorlar BigInteger bilan ishlamaydi. Ularning o'rniga maxsus metodlardan foydalanish kerak.

MetodAmalMisol
add()Qo'shish (+)a.add(b)
subtract()Ayirish (-)a.subtract(b)
multiply()Ko'paytirish (*)a.multiply(b)
divide()Bo'lish (/)a.divide(b)
mod()Qoldiqni topish (%)a.mod(b)

Keling, ushbu metodlarni amalda ko'rib chiqamiz.

import java.math.BigInteger;

public class ArithmeticExample {
    public static void main(String[] args) {
        BigInteger a = new BigInteger("20000000000000000000");
        BigInteger b = new BigInteger("5000000000000000000");

        // Qo'shish
        BigInteger yigindi = a.add(b);
        System.out.println("Yig'indi: " + yigindi); // Natija: 25000000000000000000

        // Ko'paytirish
        BigInteger kopaytma = a.multiply(b);
        System.out.println("Ko'paytma: " + kopaytma); // Natija: 100000000000000000000000000000000000000
        
        // Bo'lish
        BigInteger bolinma = a.divide(b);
        System.out.println("Bo'linma: " + bolinma); // Natija: 4
    }
}

Ko'rib turganingizdek, BigInteger standart ma'lumot turlari sig'maydigan hisob-kitoblarni osonlik bilan bajarish imkonini beradi. Uning yordamida juda katta sonlar bilan ishlash oddiy arifmetik amallar kabi qulay bo'ladi.

Quiz Questions 1/5

Java'da qanday holatlarda long tipi o'rniga BigInteger sinfidan foydalanish zarur bo'ladi?

Quiz Questions 2/5

Quyidagi kod parchasi ekranga nima chiqaradi?

BigInteger a = new BigInteger("100");
BigInteger b = a;
b = b.add(BigInteger.ONE);
System.out.println(a);