Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 6

Петя криптограф

06.06.2015, 17:03. Показов 1133. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, как обычно у студентов началась зачетная неделя, и вот преподаватель озадачил задачей:
Как-то раз известный криптоаналитик Петя разрабатывал очередной шифр. Ему понадобилась псевдослучайная последовательность цифр определённой длины, которую можно было бы легко восстановить по ключевым данным. В качестве такой последовательности Петя выбрал последовательность цифр, стоящих в конце факториала числа N. Факториалом положительного целого числа N называется произведение всех целых чисел от 1 до N. Так как факториалы больших чисел оканчиваются множеством нулей, что не удовлетворяет требованиям криптостойкости, Петя решил эти нули не учитывать.
Требуется написать программу, которая поможет Пете по заданному числу N и длине последовательности K получить необходимую последовательность цифр. При этом если количество значащих цифр (без учёта конечных нулей) в факториале меньше K, то итоговая последовательность должна иметь длину меньше K.
В единственной строке входного файла записаны через пробел целые числа N (1 ≤ N ≤ 1 000 000) и K (1 ≤ K ≤ 100).
Выведите в выходной файл искомую последовательность цифр.
03.06.15
Пример ввода 1
3 1
Пример вывода 1
6
Пример ввода 2
10 2
Пример вывода 2
88
Пример ввода 3
10 50
Пример вывода 3
36288

Так вот я попыталась ее решить, но у меня все равно что то не получается, и не могу догадаться как дописать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <math.h>
using namespace std;
long int factorial(int n)
{
if (n<=1)
return (n);
else return(n*factorial(n-1));
}
 
int main ()
{
int i,k,j; long int f,a;
cin>>i;
cin>>k;
f=factorial(i);
cout<<f;
if(f%10==0)
for(a=10; ;a*=10){
f/=a;
if(f%10!=0)break;
}
cout<<' '<<a<<endl;
}
Прошу, помогите дописать! Очень нужен этот зачет((((
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.06.2015, 17:03
Ответы с готовыми решениями:

Изобретательный петя
Петя нашел на чердаке старый телеграфный аппарат и приделал к нему хитроумное устройство, которое может печатать на телеграфной ленте...

Петя решает задачи
Здравствуйте! Помогите, пожалуйста, решить задачу: На первую задачу Пете уйдет 1 минута, на вторую задачу на две минуты больше, а...

Петя загадал 7 целых чисел: от -4 до 4 каждое
Петя загадал 7 целых чисел: от -4 до 4 каждое. Хитрый Коля предложил Пете составить сумму по следующему алгоритму. Первое число умножают на...

7
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
06.06.2015, 17:59
C++
1
2
3
4
5
f=factorial(i);
cout<<"f ="<<f<<"\n";
while (f%10==0) f\=10;//отбрасываем нули в конце
cout<<"f ="<<f<<"\n";
cout<<f%pow(10,k);
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 6
06.06.2015, 18:19  [ТС]
почему то выдает ошибку что long int не подходит под операнд %
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
06.06.2015, 18:27
В какой строчке?
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 6
06.06.2015, 18:31  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
while (f%10==0) f\=10;//отбрасываем нули в конце
в этой(
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
06.06.2015, 18:37
слеш не в ту сторону стоит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    #include <iostream>
    #include <math.h>
    using namespace std;
    long int factorial(int n)
    {
    if (n<=1)
    return (n);
    else return(n*factorial(n-1));
    }
     
    int main ()
    {
    int i,k,j; long int f,a;
    i=10;
    k=2;
    f=factorial(i);
    cout<<"f ="<<f<<"\n";
    while (f%10==0) f/=10;//отбрасываем нули в конце
    cout<<"f ="<<f<<"\n";
    cout<<f%((int)pow(10,k));
    }
0
0 / 0 / 0
Регистрация: 06.06.2015
Сообщений: 6
06.06.2015, 19:06  [ТС]
спасибо все работает, но пишет превышение лимита времени, как можно уменьшить не знаете?!)
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
06.06.2015, 19:43
попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main (){
  int n,k;
  //cin>>n;
  //cin>>k;
  n=10;
  k=2;
  long int f = 2;
  for (int i=3;i<=n;i++) f*=i;  
  while (f%10==0) f/=10;//отбрасываем нули в конце
  n=10;  
  for (int i=1;i<k;i++) n*=10;
  cout << f%n;
}
Добавлено через 14 минут
Быстрое вычисление факториала:
Нахождение факториала: для заданного N найти последнюю отличную от нуля цифру
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.06.2015, 19:43
Помогаю со студенческими работами здесь

Олимпиадная задача. Юный программист Петя обучает своего младшего брата арифметике
Карточки для счета Юный программист Петя обучает своего младшего брата арифметике. Петя заготовил много карточек, на каждой из которых...

За сколько месяцев Петя накопит на компьютер, откладывая заданную часть денег, получаемых на карманные расходы?
Каждую неделю Петя получает сумму в размере S рублей на личные расходы, из них он тратит X% на сладости, остальные деньги откладывает для...

В тексте заменить слово «Петя» на слово «Игорь»
Если в строке содержится слово «Петя», заменить его на слово «Игорь». Не используя replace и string.

Вася и Петя ограбили банк: вычислить, сколько монет украл Петя
Вася и Петя ограбили банк. Каждый из них смог вынести по одному мешку с золотом. Вскоре грабителей поймали. Для того, чтобы смягчить...

Криптограф
Помогите с созданием криптографа. Пробовал использовать метод replace(), но либо выдает слишком много знаков, либо неправильно кодирует....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru