Var x,p:integer;
begin
p:=1;
for x:=10 to 99 do
if x mod 4=3 then p:=p*x;
writeln(p);
end.
В итоге мне выбивает число -269060761 почему?
Домашние задания: Информатика
Вычислить произведение двухзначных чисел которые при делении на 4 дают в остатке 3. Что здесь не так?
Даже тип p на int64 не справляется
Попробовал..
Var
x:integer;
p:int64;
begin
p:=1;
for x:=10 to 99 do
if x mod 4=3 then p:=p*x;
writeln(p);
end.
Не то, должно оканчиваться на 5, но это не так.
Попробовал..
Var
x:integer;
p:int64;
begin
p:=1;
for x:=10 to 99 do
if x mod 4=3 then p:=p*x;
writeln(p);
end.
Не то, должно оканчиваться на 5, но это не так.
Потому, что у вас должно получиться очень большое число,
в котором 39 значащих цифр.
Ну не лезет оно в переменную типа integer, значения которого могут быть только от -2147483648 и до 2147483647…

в котором 39 значащих цифр.
Ну не лезет оно в переменную типа integer, значения которого могут быть только от -2147483648 и до 2147483647…

Ирина Тарасова
Тогда сделаю int64 и норм будет, спасибо
type bigint = class
private
digits: List;
public
constructor Create; // По умолчанию
begin
self.digits := new List;
end;
constructor Create(s: string); // Из строки
begin
self.digits := new List;
for var i := s.Length downto 1 do self.digits.Add(s[i].ToDigit);
end;
static procedure operator*=(var x: bigint; a: integer);
begin
if a = 0 then begin x.digits.RemoveAll(x -> true); x.digits.Add(0); end;
var y := x;
for var i := 1 to a-1 do x := x + y;
end;
static function operator+(x, y: bigint): bigint;
var z := new bigint;
var d: integer; // Перенос в старший разряд
begin
while x.digits.Count <> y.digits.Count do // Дополнить нулями до размера
if x.digits.Count < y.digits.Count then x.digits.Add(0)
else y.digits.Add(0);
for var i := 0 to x.digits.Count-1 do // Сложение
if x.digits[i] + y.digits[i] + d < 10 then begin // Без переноса
z.digits.Add(x.digits[i] + y.digits[i] + d);
d := 0;
end
else begin // С переносом
z.digits.Add((x.digits[i] + y.digits[i] + d) mod 10);
d := 1;
end;
if d > 0 then z.digits.Add(d); // Добавить разряд
while x.digits.Item[x.digits.Count-1] = 0 do // Убрать нули в начале
x.digits.RemoveAt(x.digits.Count-1);
while y.digits.Item[y.digits.Count-1] = 0 do
y.digits.RemoveAt(y.digits.Count-1);
Result := z;
end;
function ToString: string; override;
var s: string;
begin
for var i := self.digits.Count-1 downto 0 do s += self.digits[i];
Result := s;
end;
end;
begin
var p := new bigint('1');
for var x := 10 to 99 do
if x mod 4 = 3 then p *= x;
p.ToString.Println;
end.
private
digits: List;
public
constructor Create; // По умолчанию
begin
self.digits := new List;
end;
constructor Create(s: string); // Из строки
begin
self.digits := new List;
for var i := s.Length downto 1 do self.digits.Add(s[i].ToDigit);
end;
static procedure operator*=(var x: bigint; a: integer);
begin
if a = 0 then begin x.digits.RemoveAll(x -> true); x.digits.Add(0); end;
var y := x;
for var i := 1 to a-1 do x := x + y;
end;
static function operator+(x, y: bigint): bigint;
var z := new bigint;
var d: integer; // Перенос в старший разряд
begin
while x.digits.Count <> y.digits.Count do // Дополнить нулями до размера
if x.digits.Count < y.digits.Count then x.digits.Add(0)
else y.digits.Add(0);
for var i := 0 to x.digits.Count-1 do // Сложение
if x.digits[i] + y.digits[i] + d < 10 then begin // Без переноса
z.digits.Add(x.digits[i] + y.digits[i] + d);
d := 0;
end
else begin // С переносом
z.digits.Add((x.digits[i] + y.digits[i] + d) mod 10);
d := 1;
end;
if d > 0 then z.digits.Add(d); // Добавить разряд
while x.digits.Item[x.digits.Count-1] = 0 do // Убрать нули в начале
x.digits.RemoveAt(x.digits.Count-1);
while y.digits.Item[y.digits.Count-1] = 0 do
y.digits.RemoveAt(y.digits.Count-1);
Result := z;
end;
function ToString: string; override;
var s: string;
begin
for var i := self.digits.Count-1 downto 0 do s += self.digits[i];
Result := s;
end;
end;
begin
var p := new bigint('1');
for var x := 10 to 99 do
if x mod 4 = 3 then p *= x;
p.ToString.Println;
end.
Татьяна Алтынникова
3.0236691858741E+38
Татьяна Алтынникова
Тупо, медленно и стрёмно.. Но в рамках данной задачи подойдет.
Татьяна Алтынникова
Какой это класс, кстати? Для школы не так уж и просто..
Похожие вопросы
- Очень нужна помощь! Напечатать «столбиком» квадраты всех двухзначных чисел, используя операторы While и Repeat
- Запишите число, которое будет напечатано в результате выполнения следующей программы. Можно с объяснением.
- 1) Напишите программу для подсчета произведения чисел введённых пользователем.
- Найди основания систем счисления, в которых запись десятичного числа 35 не оканчивается на 3
- Сколько существует натуральных чисел у которых сумма цифр равна 2023 а произведение цифр равно 27
- Ввести 3 числа информатика
- Заполнить массив из 15 элементов случайными трехзначными числами; сосчитать количество элементов массива, у которых вто
- МЕТОД ПОЛОВИННОГО ДЕЛЕНИЯ
- Найдите сколько четырехзначных чисел делятся на 4 и не делятся на 8. В ответ запишите только число
- Создайте программу, которая проверяет, является ли хотя бы одно из трех чисел, введенных с клавиатуры, четным.
1) Меньше 100 таких чисел 25.
2) Меньше 10 таких чисел 2.
3) Остаётся 23 двузначных числа.
4) При перемножении 23 двузначных чисел должно получиться от 24 до 46 значащих цифр.
5) int64 — это 19 значащих цифр