Java Büyük Tamsayı

Java Buyuk Tamsayi



Java, 64 bitlik sayılardan daha büyük olan çok büyük sayıları yönetmek için özel bir BigInteger sınıfı sunar. Bu sınıfın işleyebileceği tamsayı değerlerinin boyutu, JVM'nin ayrılmış belleği tarafından basitçe sınırlandırılır. Bir Number'ı miras alan BigInteger sınıfı, Comparable arabirimini uygular. Java.lang.math modülündeki her yöntemin yanı sıra her Java ilkel tamsayı operatörü için eşdeğerler verir. BigInteger sınıfının değişmezliği nedeniyle BigInteger nesnesinin saklanan değeri değiştirilemez.

Örnek 1:

Aşağıdaki program, Java'da BigInteger oluşturmak için bir yol sağlar ve sağlanan BigInteger değerine aritmetik işlemi uygular.








BigInteger sınıfını program içindeki java math paketinden import ettik. Bundan sonra BigInteger nesnelerini “bigInt1” ve “bigInt2” java sınıfının “BigIntegerExample” main() yönteminde bildirdik. Ardından, BigInteger sınıfı içindeki büyük sayısal değerlerle BigInteger nesnelerini başlattık. Belirtilen büyük tamsayı değeri üzerinde aritmetik işlemi gerçekleştirmek için BigInteger sınıfından başka bir nesne oluşturduk. Nesneler BinInteger değerini çarpmak için “Multiplication” ve BigInteger değerini bölmek için “Bölme” olarak bildirilir.



Ardından, 'bigInt2' girdisini alan 'multiply' nesnesine BigInteger'ın multiple() yöntemiyle birlikte 'bigInt1'i atadık. Ayrıca, 'bigInt1' ile bölünecek olan 'bigInt2' parametresini alan ve yürütmeden sonra sonuçları yazdıran Division() yöntemini çağırdık.



BigInteger değerleri üzerindeki çarpma ve bölme işlemi sonuçları aşağıdaki çıktı görüntüsünde gösterilmektedir. Java'da BigInteger bu şekilde yapılandırılır ve çeşitli işlemler için kullanılır.





Örnek 2:

Faktöriyel hesaplama, çok büyük girdiler alan bir tamsayının iyi bir örneğidir. BigInteger, daha büyük tamsayı değerleri için faktöriyel elde etmek için de kullanılabilir.




BigInteger sınıfının, int türündeki 'num' nesnesinin 'Num' değerinin faktöriyelini döndürmek için argüman olarak iletildiği 'factorial' işlevini yarattık. “Factorial” fonksiyonu içinde, BigInteger değeri “2”nin belirtildiği bir BigInteger nesnesi “max_fict” ilan ettik. Bundan sonra, 'max_fict' değerini yineleyecek ve ardından multiple() yöntemi çağrıldığında n'inci değere kadar 4, 5 ile çarpacak olan for-loop'u konuşlandırdık. Çarpmanın () kendisine, for döngüsünün 'i' nesnesinin sağlandığı başka bir 'değerOf' yöntemi denir. Return ifadesi daha büyük faktöriyel sağlayacaktır. Ardından, programın main() yöntemini oluşturduk. “Num” nesnesini değerle başlattık ve “Num”un faktöriyelini factorial() yönteminden yazdırdık.

“40” sayısının faktöriyel değeri aşağıdaki gibi BigInteger değerini sağlar:

Örnek 3:

BigInteger sınıfının bitCount() işlevi, bitleri sayar. bitCount() yöntemi, bu BigInteger'da iki tümleyen biçiminde olan ve işaret bitinden farklı olan bitlerin sayısını verir. Bu yöntem, BigInteger'ın değeri pozitif olduğunda ayarlanan bitleri döndürür. Öte yandan, BigInteger negatif bir değerle belirtilirse, bu yöntem sıfırlama bitlerinin sayısını döndürür.


“BigInteger” tip sınıfından “b1” ve “b2” olmak üzere iki değişken bildirdik. Ayrıca iki değişken daha tanımladık, 'integer1' ve 'integer2', int primitif tip. Bildirimin ardından “b1” pozitif BigInteger değeri ile “b2” negatif BigInteger değeri ile başlattık. Ardından, 'b1' ve 'b2' BigInteger değişkenlerine bitCount() yöntemiyle 'integer1' ve 'integer2'yi atadık. Sayılan bitler, belirtilen BigInteger değerleri için bitCount() yönteminden elde edilecektir.

Pozitif BigInteger '2' biti sağlar ve BigInteger'ın negatif değeri '1' bit değerini verir.

Örnek 4:

BigInteger'daki büyük boyutlu sayısal verilerin mutlak değeri, BigInteger sınıfının abs() yöntemi kullanılarak belirlenebilir. abs() yöntemi, BigInteger'ın mutlak değerini döndürür.


Dört değişken bildirdiğimiz bir BigInteger sınıfımız var: 'big1', 'big2', 'big3' ve 'big4'. “big1” ve “big2” değişkenleri sırasıyla pozitif ve negatif değerlerle belirtilmiştir. Daha sonra “big3” ve “big4” değişkenlerinde “big1” ve “big2” ile abs() yöntemini çağırdık. abs() yönteminin herhangi bir girdi değeri almadığını ancak 'big1' ve 'big2' değişkenleriyle çağrıldığını unutmayın. abs() yöntemi, bu BigInteger değişkenleri için mutlak değeri alır ve sonuçlar derleme zamanında yazdırılır.

Pozitif 432 ve negatif 432 değerlerinin mutlak değeri aynıdır çünkü abs() yöntemi her zaman pozitif mutlak değeri döndürür.

Örnek 5:

BigInteger değerlerinin karşılaştırması, BigInteger CompareTo() yöntemi kullanılarak elde edilebilir. BigInteger, CompareTo() yönteminde bir parametre olarak girilen BigInteger ile karşılaştırılır. CompareTo() yönteminin dönüş değeri, BigInteger değerlerini temel alır. BigInteger değerinin karşılaştırması eşit olduğunda sıfır döndürülür. Aksi takdirde, BigInteger değerinin argüman olarak iletilen BigInteger değerinden büyük veya küçük olması koşuluyla “1” ve “-1” döndürülür.


“BigInteger” sınıfının “MyBigInt1” ve “MyBigtInt2” bildirimi nesnelerimiz var. Bu nesneler daha sonra aynı BigInteger değerleriyle belirtilir. Bundan sonra, 'MyBigInt1' nesnesinin CompareTo() yöntemiyle çağrıldığı ve 'MyBigInt2' nesnesinin 'MyBigInt2' nesnesi ile karşılaştırılmak üzere bir argüman olarak iletildiği 'comparevalue' adlı başka bir nesne oluşturduk. Ardından, CompareTo() yönteminin sonuçlarının “0” değerine eşit olup olmadığını kontrol ettiğimiz bir if-else ifademiz var.

Her iki BigInteger nesnesi de aynı değerlere sahip olduğundan, CompareTo() sonuçları aşağıdaki resimde gösterildiği gibi sıfır döndürür.

Örnek 6:

BigInteger flipBit(index) yöntemi, bir BigInteger içindeki belirli bir bit konumunda çevirmek için de kullanılabilir. Bu yöntem (bigInt ^ (1<


'B_val1' ve 'B_val2' olmak üzere iki BigInteger değişkeni tanımladık. “B_val1” değişkeni, değerin belirtildiği BigInteger sınıfı ile başlatılır. Ardından flipBit() methodu ile “B_val2” değişkenini ayarladık, burada flipBit işlemi indeks değeri “2” olan “B_value” değişkeni üzerinde gerçekleştiriliyor.

BigInteger değerinin “9” indeks konumu, çıktıda “13” değerini veren “2” indeksi ile çevrilir.

Çözüm

BigInteger sınıfının kullanımı çok uygundur ve geniş yöntem kitaplığı nedeniyle rekabetçi programlamada sıklıkla kullanılır. BigInteger, şu anda erişilebilen tüm ilkel veri türlerinin kapasitesini aşan çok uzun sayıların hesaplanması için kullanılır. Modüler aritmetik işlemler için çeşitli yöntemler sağlar. Önce BigInteger'ı oluşturduk ve ardından birkaç yöntemini ele aldık.