Якщо
вам недостатньо точності вбудованих цілочисельних типів і чисел з
плаваючою точкою, можна звернутися до двох корисним класах пакет java.
math під назвою Biglnteger і BigDecimal. Ці класи призначені для
маніпуляцій з числами, що складаються з довільної кількості цифр. Класи
Biglnteger і BigDecimal реалізують арифметичні операції довільної
точності для цілих і дійсних чисел відповідно.
При цьому числа розміщуються в сукупності послідовних байтів
необхідної довжини. Природно, що ефективність будь-яких операцій над
такими числами значно нижче, ніж над величинами типу int.
Для перетворення звичайного числа велике використовується статичний метод valueOf:
Biglnteger а = Biglnteger.valueof(100);
На жаль, до великих чисел не можна застосовувати звичайні математичні оператори + і *.
Замість цього програміст повинен використовувати методи add і multiply з класів для роботи з великими числами.
Для перетворення звичайного числа велике використовується статичний метод valueOf:
Biglnteger а = Biglnteger.valueof(100);
На жаль, до великих чисел не можна застосовувати звичайні математичні оператори + і *.
Замість цього програміст повинен використовувати методи add і multiply з класів для роботи з великими числами.
BigInteger с = a.add(b); // с = a + b
BigInteger d = с.multiply(b.add(BigInteger.valueOf(2))); // d - с * (b + 2)
BigInteger d = с.multiply(b.add(BigInteger.valueOf(2))); // d - с * (b + 2)
API:
java.math.BigInteger 1.1
- Biglnteger add(Biglnteger other)
- Biglnteger subtract(Biglnteger other)
- Biglnteger multiply(Biglnteger other)
- Biglnteger divide(Biglnteger other)
- Biglnteger mod(Biglnteger other)
Ці функції повертають суму, різницю, добуток, частку і залишок від ділення великого числа на значення змінної other.
- int compareTo(Biglnteger other)
Повертає 0, якщо дане велике число дорівнює значенню змінної other, від'ємне число, якщо дане велике число менше значення змінної other, і позитивне число в іншому випадку.
- static Biglnteger valueOf(long x)
Повертає велике число, значення якого дорівнює значенню змінної х.
API:
java.mathBigDecimal 1.1
- BigDecimal add (BigDecimal other)
- BigDecimal subtract (BigDecimal other)
- BigDecimal multiply (BigDecimal other)
- BigDecimal divide (BigDecimal other, int roundingMode)
Повертає суму, різницю, добуток і частку від ділення десяткового числа на значення змінної other. Щоб обчислити частку, потрібно підтримувати режим округлення. Режим BigDecimal.
HALF ROUND UP означає звичайне округлення (тобто у бік зменшення, якщо остання цифра менше 5, і в бік збільшення, якщо вона більше 5). Для звичайних обчислень цього достатньо. Інші режими округлення описані в документації по інтерфейсу API.
- int compareTo(BigDecimal other)
Повертає 0, якщо дане число типу BigDecimal дорівнює значенню змінної other, від'ємне число, якщо дане число менше значення змінної other, і позитивне число в іншому випадку.
- static BigDecimal vaiueOf (long x)
- static BigDecimal vaiueOf (long x, int scale)
Повертає велике десяткове число, значення якого дорівнює значенню змінної х або х/10scale
Работа с большими числами в Java
Приклад:
додавання двох чисел (числа знаходяться у файлі)import java.util.*;
import java.io.*;
import java.math.BigInteger;
public class Main{
public static void main(String[] argv) throws IOException{
new Main().run();
}
PrintWriter pw;
Scanner sc;
public void run() throws IOException{
sc = new Scanner(new File("input.txt"));
BigInteger a,b;
a=sc.nextBigInteger();
b=sc.nextBigInteger();
System.out.println(a.add(b));
pw = new PrintWriter(new File("output.txt"));
pw.println(a.add(b));
pw.close();
}
}
Немає коментарів:
Дописати коментар