Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Adramelika
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 17
#1

Найти цифру, на которую оканчивается число a^b - Turbo Pascal

23.04.2015, 16:41. Просмотров 1279. Ответов 14
Метки нет (Все метки)

Требуется написать программу, которая находит цифру, на которую оканчивается число a^b.

Входные данные:
Входной поток состоит из единственной строки, содержащей два целых числа a и b, разделенных пробелом (1 ≤ a, b ≤ 10000000).

Выходные данные:
В единственную строку выходного потока нужно вывести цифру, на которую оканчивается a^b.

Пример входного файла (input.txt):
3 3

Пример выходного файла (output.txt):
7
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2015, 16:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Найти цифру, на которую оканчивается число a^b (Turbo Pascal):

Найти число в котором, зачеркнув последнюю цифру, получится число в 14 раз меньше исходного
2)Найти число, обладающее следующим свойством:если в нем зачеркнуть последнюю...

Динамические переменные. Найти трёхзначное число, квадрат которого оканчивается тремя одинаковыми цифрами отличными от нуля
Нужно найти трёхзначное число, квадрат которого оканчивается тремя одинаковыми...

Целочисленная арифметика. Дано трехзначное число. В нем зачеркнули последнюю справа цифру и приписали ее в начале. Найти полученное число
1. Дано трехзначное число. В нем зачеркнули последнюю справа цифру и приписали...

В трехзначном числе зачеркнули первую цифру слева, когда полученное двузначное число умножили на 7, то получили данное число. Найти это числ
В трехзначном числе зачеркнули первую цифру слева, когда полученное двузначное...

Найти максимальное число в массиве и его максимальную цифру
Массив должен задаваться в секции объявлений глобальных переменных, например:...

14
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3755 / 2452 / 2034
Регистрация: 22.11.2013
Сообщений: 6,821
23.04.2015, 17:15 #2
Лучший ответ Сообщение было отмечено Adramelika как решение

Решение

Pascal
1
2
3
4
5
6
7
8
var t, b: Longint; a, c: Integer;
begin
  Assign(input,'input.txt'); Reset(input);
  Assign(output,'output.txt'); Rewrite(output);
  ReadLn(t,b); a:=t mod 10; c:=a;
  for b:=2 to b do c:=a*c mod 10;
  WriteLn(c);
end.
1
Adramelika
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 17
23.04.2015, 17:22  [ТС] #3
Не проходит :с

Добавлено через 4 минуты
Спасибо =)
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3755 / 2452 / 2034
Регистрация: 22.11.2013
Сообщений: 6,821
23.04.2015, 17:32 #4
Но с учетом того, что b может быть достаточно велико, лучше так (использован алгоритм быстрого возведения в степень):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
  t, b: Longint;
  a, c: Integer;
begin
  Assign(input,'input.txt'); Reset(input);
  Assign(output,'output.txt'); Rewrite(output);
  ReadLn(t,b); a:=t mod 10; c:=1;
  while b>0 do begin
    if Odd(b) then begin
      c:=a*c mod 10; Dec(b);
    end;
    a:=a*a mod 10; b:=b div 2;
  end;
  WriteLn(c);
end.
0
ФедосеевПавел
Модератор
3414 / 1911 / 815
Регистрация: 01.02.2015
Сообщений: 6,451
24.04.2015, 23:43 #5
А так?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program x;
 
var
  a, b, i, r: longint;
begin
  Assign(input, 'input.txt');
  Reset(input);
  Assign(output, 'output.txt');
  Rewrite(output);
  ReadLn(a, b);
  if b = 0 then
    writeln('1')
  else
  begin
    a := a mod 10;
    r := a;
    for i := 2 to 4 + (b mod 4) do
      r := r * a;
    writeln(r mod 10);
  end;
  Close(input);
  Close(output);
end.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3755 / 2452 / 2034
Регистрация: 22.11.2013
Сообщений: 6,821
25.04.2015, 15:40 #6
ФедосеевПавел,
тут стоит упомянуть, что используется пара замечаний:
1) последняя цифра произведения зависит только от последних цифр множителей
2) если умножать число само на себя, самая длинная уникальная последовательность из последних цифр не длиннее 4-х:
0: 0, ...
1: 1, ...
2: 2, 4, 8, 6, ...
3: 3, 9, 7, 1, ...
4: 4, 6, ...
5: 5, ...
6: 6, ...
7: 7, 9, 3, 1, ...
8: 8, 4, 2, 6, ...
9: 9, 1, ...
и наименьшим общим кратным длин последовательностей является 4.

Поэтому достаточно выполнить не больше 4+b mod 4 умножений для получения результата, т.е. не более 7.
1
ФедосеевПавел
Модератор
3414 / 1911 / 815
Регистрация: 01.02.2015
Сообщений: 6,451
25.04.2015, 16:33 #7
Да. А с циклом - я просто по-быстрому не сообразил, как сделать "if b mod 4=0 then b:=4 else b:=b mod 4" арифметическим выражением - хотелось без условия. А то, можно было бы обойтись и без добавления 4 с потенциальной угрозой переполнения.
И ещё можно добавить
3) 4 кратно всем периодам.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3755 / 2452 / 2034
Регистрация: 22.11.2013
Сообщений: 6,821
25.04.2015, 20:17 #8
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
3) 4 кратно всем периодам
про наименьшее общее кратное уже было добавлено в конце (2) :-)
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
как сделать "if b mod 4=0 then b:=4 else b:=b mod 4" арифметическим выражением
b mod 4 + 4*Ord(b mod 4=0)
но можно было и перед циклом расписать:
b:=b mod 4; if b=0 then b:=4;
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
25.04.2015, 20:41 #9
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
как сделать "if b mod 4=0 then b:=4 else b:=b mod 4" арифметическим выражением
Pascal
1
(b - 1) mod 4 + 1
1
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3755 / 2452 / 2034
Регистрация: 22.11.2013
Сообщений: 6,821
25.04.2015, 21:12 #10
Цитата Сообщение от Somebody Посмотреть сообщение
(b - 1) mod 4 + 1
Немного не то:
(0-1) mod 4 + 1 = -1 mod 4 + 1 = -1 + 1 = 0
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
25.04.2015, 21:25 #11
b >= 1 по условию, да и при b = 0 в данной задаче между 0 и 4 разницы не будет.

Добавлено через 5 минут
Вот тогда универсальный вариант:
Pascal
1
4 - -b and 3
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3755 / 2452 / 2034
Регистрация: 22.11.2013
Сообщений: 6,821
25.04.2015, 22:15 #12
Somebody,
Про b>0 просмотрел, да.
0
ФедосеевПавел
Модератор
3414 / 1911 / 815
Регистрация: 01.02.2015
Сообщений: 6,451
26.04.2015, 09:29 #13
Я склоняюсь к варианту Somebody - на числах больших 0 она корректно себя ведёт, а на отрицательных числах поведение mod очень зависит от компилятора - по крайней мере попадались такие обзоры (Delphi и TurboPascal давали один результат, а FreePascal другой). Может я ошибаюсь, но всё равно, разделил бы ветками if.
--------------------
Кажется, в итоге "магическая" функция, для избавления от if должна иметь 5 возможных значений 0...4.
Можно попробовать (Ord(b > 0) * (1 + (b - 1) mod 4)).
Pascal
1
2
3
4
5
6
7
8
program test;
 
var
  b: integer;
begin
  for b := 0 to 10 do
    writeln(b: 2, ' -> ', (Ord(b > 0) * (1 + (b - 1) mod 4)));
end.
Результат
Код
 0 -> 0
 1 -> 1
 2 -> 2
 3 -> 3
 4 -> 4
 5 -> 1
 6 -> 2
 7 -> 3
 8 -> 4
 9 -> 1
10 -> 2
И в итоге
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
program x;
 
var
  a, b, i, r: longint;
begin
  Assign(input, 'input.txt');
  Reset(input);
  Assign(output, 'output.txt');
  Rewrite(output);
  ReadLn(a, b);
  a := a mod 10;
  r := 1;
  for i := 1 to (Ord(b > 0) * (1 + (b - 1) mod 4)) do
    r := r * a;
  writeln(r mod 10);
  Close(input);
  Close(output);
end.
PS иногда не хватает сишного "(b>0)?1+((b-1) % 4):0"
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3755 / 2452 / 2034
Регистрация: 22.11.2013
Сообщений: 6,821
26.04.2015, 17:55 #14
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
не хватает сишного "(b>0)?1+((b-1) % 4):0"
Pascal
1
2
3
4
function iif(cond: Boolean; yes, no: Integer): Integer;
begin
  if cond then iif:=yes else iif:=no;
end;
Добавлено через 2 минуты
Pascal
1
for i:=2 to iif(b>0,1+(b-1) mod 4,0) do ...;
1
ФедосеевПавел
Модератор
3414 / 1911 / 815
Регистрация: 01.02.2015
Сообщений: 6,451
26.04.2015, 18:18 #15
У FPC в модулях Math и StrUtils есть подобные близнецы IfThen.
Теперь хоть запомню этот факт...
0
26.04.2015, 18:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2015, 18:18
Привет! Вот еще темы с решениями:

Дано натуральное число. Найти предпоследнюю цифру числа n
Дано натуральное число n(n<1000). В предположение, что n>=10, найти...

Дано натуральное число n. Найти вторую цифру этого числа
дано натуральное число n найти вторую цифра числа n

Дано трехзначное целое число, найти первую и последнюю цифру.
Помогите решить!!! Дано трехзначное целое число, найти первую и последнюю цифру.

Дано целое число , больше 99. Найти третью от конца его цифру
Дано целое число , больше 99. Найти третью от конца его цифру


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru