Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 29.05.2018
Сообщений: 33
1

Для числа n определить, сколько подряд нулей содержится с правого края числа n!

29.05.2018, 08:03. Показов 1193. Ответов 11
Метки нет (Все метки)

Для числа n определить, сколько подряд нулей содержится с правого края числа n!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2018, 08:03
Ответы с готовыми решениями:

Определить сколько имеется чисел таких что в их записи не содержится более двух подряд идущих нулей
Задача: среди всех чисел в системе счисления с основанием к(2<=k<=10) определить сколько имеется...

Задано два натуральных числа: m и n. Определить, сколько цифр содержится в десятичной записи числа m^n.

Вычислить сколько подряд идущих нулей в конце десятичной записи числа
Пусть P(A, B) есть произведение всех целых чисел от A до B включительно. Для заданных A и B...

Написать программу на Ассемблере "Узнать сколько в двоичном представлении числа содержится нулей."
Здравствуйте. Мне нужно написать программу на ассемблере с помощью которой можно узнать сколько в...

11
632 / 475 / 278
Регистрация: 24.02.2017
Сообщений: 1,705
29.05.2018, 08:18 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
  int n,c=0;
 
  cin>>n;
  while (1)
  {
    if(n%10!=0) break;
    c++;
    n/=10;
  }
  cout<<c;
  system("pause");
  return 0;
}
1
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
29.05.2018, 08:22 3
Задание другое)
0
632 / 475 / 278
Регистрация: 24.02.2017
Сообщений: 1,705
29.05.2018, 08:40 4
lArtl, и в чем оно выражается?
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
29.05.2018, 08:49 5
Надо найти количество нулей в факториале числа
0
Продавец времени
6432 / 3435 / 795
Регистрация: 12.03.2015
Сообщений: 16,430
29.05.2018, 08:56 6
Матчасть. Скопипастил с другого сайта, вместо того, чтобы оставить ссылку.
Кликните здесь для просмотра всего текста

Факториал одной сотни записывается как 100! Это произведение всех натуральных чисел до ста включительно. Иногда запись факториала имеет такой вид:

100 х 99 х 98 х 97 х … х 4 х 3 х 2 х 1

Для ответа на вопрос задачи вам не обязательно находить результат умножения. От вас ждут, чтобы вы лишь определили число нулей в конце произведения, не зная, каким именно оно будет. Для решения этой задачи потребуется сформулировать несколько правил. Одно из них вы уже знаете. Взгляните на следующее выражение.

387 000 х 12 900 = 5 027 131 727

Вам не кажется, что здесь есть что-то забавное? Ведь при перемножении двух круглых чисел, то есть тех, которые оканчиваются на нули, невозможно получить некруглое число. Это нарушило бы закон сохранения конечных нулей (закон, который я только что вывел, но, тем не менее, он является верным). Произведение всегда унаследует нулевые окончания своих составляющих. Вот несколько верных примеров этого:

10 х 10 = 100
7 х 20 = 140
30 х 400 = 12 000

Из сомножителей факториала 100 десять заканчиваются на ноль: 10, 20, 30, 40, 50, 60, 70, 80, 90 и 100 (заканчивается на два 0). Это дает уже как минимум одиннадцать конечных нулей, которые 100! обязательно унаследует.
Предупреждение: следование только этому правилу иногда побуждает некоторых кандидатов в своем ответе заявить, что в конце факториала 100 стоят одиннадцать нулей. Такой ответ является неверным. Иногда можно умножить два числа, не заканчивающихся на ноль, и получить произведение, имеющее в конце один или несколько нулей. Вот несколько примеров этого рода:

2 х 5 = 10
5 х 8 = 40
6 х 15 = 90
8 х 125 = 1000

Все, кроме последней пары, входят в сотню составляющих факториала 100. Поэтому ваша работа не закончилась. Теперь мы подходим к закону «сосисок и булочек». Представьте себе ситуацию, когда на пикник одни люди приносят сосиски (в упаковках по десять штук), другие — булочки (упакованные по восемь штук), а некоторые — и то, и другое. Есть единственный способ, позволяющий определить, сколько хотдогов из этих продуктов можно приготовить. Сосчитайте сосиски, сосчитайте булочки и выберите меньшее число из двух.

Тот же самый закон следует использовать и отвечая на наш вопрос. Для этого надо заменить «сосиски» и «булочки» на «сомножители на 2» и «сомножители на 5».

В каждом из приведенных выше уравнений число, которое делится на 2, умножается на число, которое делится на 5. Сомножители на 2 и на 5 при их перемножении «совместно» дают идеальную десятку, что добавляет еще один ноль к общему произведению. Посмотрите на последний пример, где в конце, можно сказать, из воздуха возникает три нуля.

8 х 125 = (2 х 2 х 2) х (5 х 5 х 5)
= (2 х 5) х (2 х 5) х (2 х 5)
= 10 х 10 х 10
= 1000

Поэтому надо составить пары из двоек и пятерок. Возьмем, к примеру, число, равное 692 978 456 718 000 000.

Оно оканчивается на шесть нулей. Это означает, что его можно записать следующим образом:

692 978 456 718 х 10 х 10 х 10 х 10 х 10 х 10,

или так:

692 978 456 718 х (2 х 5) х (2 х 5) х (2 х 5) х (2 х 5) х (2 х 5) х (2 х 5).

Первая часть, 692 978 456 718, не делится на 10. В ином случае она бы оканчивалась на ноль, и можно было бы эту часть уменьшить еще в 10 раз. К тому же здесь есть шесть сомножителей, равных 10 (или 2 х 5), что соответствует шести нулям в конце числа 692 978 456 718 000 000. Ну как, убедительно?

Это дает нам надежную систему для определения количества нулей в конце любого большого числа. Выделите сомножители 2 и 5. Составьте из них пары и перемножьте их: (2 х 5) х (2 х 5) х (2 х 5) х … Число пар из двоек и пятерок равно количеству нулей в конце. Закройте глаза на все, что осталось слева.

В целом слева у вас останется двойка или пятерка, для которых не нашлось пары. Обычно это двойки. Более того, когда вы имеете дело с факториалом, это всегда двойки. (В факториалах имеется больше четных множителей, чем множителей, которые делятся на 5.) Поэтому узким местом является число пятерок. Из этого следует, что вопрос можно сформулировать по-другому: сколько раз 100! можно разделить без остатка на 5?

Эту арифметическую операцию можно легко проделать даже в голове. В диапазоне от 1 до 100 есть 20 чисел, которые делятся на пятерку: 5, 10, 15, …, 95, 100. Обратите внимание, что 25 дает 2 множителя, равные 5 (25 = 5 х 5), и к тому же в этой группе есть еще три числа, в состав которых входит 25: 50, 75 и 100. В совокупности это добавляет еще четыре пятерки, а всего их 24. 24 множителя на пять дают 24 пары с равным числом двоек, в результате чего получается 24 множителя на 10 (оставляя слева еще множество двоек, для которых не оказалось пары). Таким образом, в конце 100! будет 24 нуля.

Если вам любопытно узнать точный ответ, то значение факториала 100 равно:

93 326 215 443 944 152 681 699 238 856 266 700 490 715 968 264 381 621 468 592 963 895 217 599 993 229 915 608 941 463 976 156 518 286 253 697 920 827 223 758 251 185 210 916 864 000 000 000 000 000 000 000 000.
0
0 / 0 / 0
Регистрация: 08.12.2012
Сообщений: 31
29.05.2018, 09:57 7
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
25
26
27
28
29
30
31
32
33
#include "stdafx.h"
#include <iostream>
#include <sstream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int n,s=0,kol=0;
    cin>>n;
    while(n!=0)
    {
    s=s+n;
    n--;
    }
    string qwert;
    std::ostringstream str;
    str<< s;
    qwert=str.str();
 
    for(int i=qwert.size()-1;i!=0;i--)
    {
        char b=qwert.at(i);
        if(b=='0')
        {
            kol++;
        }
        else break;
 
    }
    cout<<kol;
    return 0;
}
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
29.05.2018, 10:14 8
Цитата Сообщение от Akana Посмотреть сообщение
...
Переполнение очень быстро произойдет.
0
0 / 0 / 0
Регистрация: 08.12.2012
Сообщений: 31
29.05.2018, 10:19 9
за счёт чего?
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
29.05.2018, 10:27 10
За счет чего может переполнится int? Оcобенно при n > 12.
0
7243 / 4899 / 2821
Регистрация: 18.12.2017
Сообщений: 15,384
29.05.2018, 16:31 11
для n от 1 до 20:

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
25
26
27
#include <iostream>
using namespace std;
 
int main()
{
    int n, count=0;
    long long m=1;
    do
    {
    cout <<"n="; cin>>n;
    if (n<1 || n>20) cout <<"1<=n<=20 !!! Repeat please...\n";
    }
    while (n<1 || n>20);
  
    for (int i=1; i<=n; i++)
    m*=i;
    cout <<n<<"!="<<m;
    while (1)
    {
    if(m%10!=0) break;
    count++;
    m/=10;
    }
    cout<<"\ncount_null="<<count<<endl;
system("pause");
return 0;
}
за основу взят код от повар1
0
Объявлятель переменных
1030 / 336 / 300
Регистрация: 24.09.2011
Сообщений: 1,126
29.05.2018, 18:04 12
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main()
{
    int n;
    std::cin >> n;
    int count = 0;
    while (n /= 5) count += n;
    std::cout << count;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2018, 18:04

Определить количество подряд идущих нулей в младших разрядах числа
Дано натуральное число N (N &gt; 9). Определить количество нулей, идущих подряд в младших разрядах...

Определить количество нулей, идущих подряд в младших разрядах данного числа
Дано натуральное число N (N&gt;9). Определить количество нулей, идущих подряд в младших разрядах...

Определить количество нулей, идущих подряд в младших разрядах данного числа.
Определить количество нулей, идущих подряд в младших разрядах данного числа. Пример. N = 1020000....

Для вводимого с клавиатуры числа определить, сколько раз подряд оно делится без оcтатка на цифры от 2 до 9
для вводимого с клавиатуры числа определить сколько раз подряд оно делиться без оcтатка на цифры от...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru