Произведение квадратов первых двухсот чисел
Необходимо составить программу нахождения произведения квадратов первых двухсот чисел. Вот что я пробовал:
long s = 1;
int j;
for (int i = 1; i <= 200; i++) {
j = (int) Math.pow(i,2);
s *= j;
}
System.out.println(s);
Выводит 0, так как по-видимому выхожу за рамки long. Каким образом ещё можно решить эту задачу?
Ответы (1 шт):
В java и в других языках существуют большие числа. BigInteger и BigDecimal.
BigInteger a = BigInteger.valueOf(2147483647);
BigInteger b = BigInteger.valueOf(2147483641);
//a *= b;
// так нельзя, так как это объекты, а не примитивы
a = a.multiply(b);
// так можно - помните, что применение этой ф-ции не изменяет этот объект -
// оно возвращает новый
Нужно переписать так:
BigInteger s = BigInteger.valueOf(1);
for(int i = 2; i <= 200; i++) {
s = s.multiply(BigInteger.valueOf((long) i * i));
}
System.out.println(s);
Соответственно, вывод будет следующим:
621981231756379489999997501700030226361030042908402135795585416076780567701229627071194748755274771867550481130867332728398608915678217606208944334143532903157416015053231992085653846275159616127812272870349795208758168675609821292383968189620347359298821336964567268936282003057371855944848505049857604569455105033587666178052186125598590101814860460233644389300432456960009702905584857393518877079243717213370983146491503406155228997954249347719005783769360467152555665800216223615428450836858053400856713359967484823371026535062161096211713506798207812398746913836648755132232834523663952442186966337759051603462287553956523494664588575257708095078400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000