ваши ошибки:
1) объявление текстовых переменных и неиспользование их.
2) ненужный тип longint, зачем такой большой тип?
типа integer вполне достаточно (-32 768 … 32 767).
3) объявление абсолютно ненужной переменной z.
4) главная ошибка - это непонимание , и соответственно неправильно построенный алгоритм.
попробуйте это, самое оптимальное по времени, минимальное кол-во переменных. использован метод гаусса, можно было и арифм. прогрессию.
var
n: integer;
text: text;
begin
assign(text, 'input.txt'); reset(text);
readln(text, n); close(text);
if (n > 10000) then exit;
assign(text, 'output.txt'); rewrite(text);
if n < 0 then writeln(text, + abs(n)) * (abs(n) / 2) - 1))
else writeln(text, (1 + n) * (n / 2));
close(text);
end.
давайте разберем выражение по порядку. выражение 4^350 = 2 ^ 700 имеет 700 значащихся нулей и одну единицу. прибавляя 8 ^ 340 = 2 ^ 1020 и нас получится 1019 значащихся нулей и две единицы которые стоят в разрядах 1021 и 701. отнимая от этого 2 ^ 320 мы превратим все нули которые стоят в разрядах от 321 до 700 в единицы, а цифра в разряде 701 становится нулем. почему так происходит наглядно демонстрирую в маленьких числах.
например 1024 - 32.
в двоичной записи выглядит так:
100 0000 0000
- 000 0010 0000
011 1 1 10 0000
при отнимании 2^10 - 2^5 все нули в разрядах(с конца) 6 до 10 превратились в единицы.
и так теперь у нас (1019 - 328 + 1) 640 значащихся нулей и 280 единиц.
представим 12 в виде 4 + 8, чтобы легче было отнять.
сначала напомним как выглядит наше выражение.
числа стоящихся в разрядах нули, единицы все нули, 1021 единица.
отнимая 8 мы превратим все нули в разрядах 4 320 в единицы.
теперь у нас 324 значащихся нулей и теперь неважно сколько единиц, ведь нам нужен только количество нулей. у нас остался 4. так как цифра на разряде 4 у нас единица и 8 - 4 = 4, отнимая 4 количество нулей не изменится и итоговый ответ у нас 324.
Поделитесь своими знаниями, ответьте на вопрос: