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

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

23.04.2015, 16:41. Просмотров 1597. Ответов 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
Ответы с готовыми решениями:

Дано число. Определить, оканчивается ли данное число на цифру 7
4. Дано число. Определить, оканчивается ли данное число на цифру 7.

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

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

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

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

14
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3900 / 2558 / 2084
Регистрация: 22.11.2013
Сообщений: 7,151
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
3900 / 2558 / 2084
Регистрация: 22.11.2013
Сообщений: 7,151
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
ФедосеевПавел
Модератор
3667 / 2036 / 842
Регистрация: 01.02.2015
Сообщений: 6,770
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
3900 / 2558 / 2084
Регистрация: 22.11.2013
Сообщений: 7,151
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
ФедосеевПавел
Модератор
3667 / 2036 / 842
Регистрация: 01.02.2015
Сообщений: 6,770
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
3900 / 2558 / 2084
Регистрация: 22.11.2013
Сообщений: 7,151
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,213
Завершенные тесты: 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
3900 / 2558 / 2084
Регистрация: 22.11.2013
Сообщений: 7,151
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,213
Завершенные тесты: 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
3900 / 2558 / 2084
Регистрация: 22.11.2013
Сообщений: 7,151
25.04.2015, 22:15 12
Somebody,
Про b>0 просмотрел, да.
0
ФедосеевПавел
Модератор
3667 / 2036 / 842
Регистрация: 01.02.2015
Сообщений: 6,770
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
3900 / 2558 / 2084
Регистрация: 22.11.2013
Сообщений: 7,151
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
ФедосеевПавел
Модератор
3667 / 2036 / 842
Регистрация: 01.02.2015
Сообщений: 6,770
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


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

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

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