Форум программистов, компьютерный форум CyberForum.ru

N!= 1*2*3*...*N - C++

Восстановить пароль Регистрация
 
Bek
1 / 1 / 0
Регистрация: 08.01.2010
Сообщений: 4
24.01.2010, 08:21     N!= 1*2*3*...*N #1
Привет всем. Нужна помощь. Буду очень благодарен. Заранее огромное СПАСИБО.
1. Ввдится N. Необходимо найти, на сколько нулей оканчивается число N!= 1*2*3*...*N.
2. Даны натуральные числа n, a1, a2,..., an. (n<10000). Определить наименьшее натуральное число, отсутствующее в этой последовательности.
3. Ввести с клавиатуры число и определить сколько раз оно встречается в массиве.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Radjuk
 Аватар для Radjuk
134 / 68 / 12
Регистрация: 10.10.2009
Сообщений: 187
24.01.2010, 11:18     N!= 1*2*3*...*N #2
3)
дял 1 вымерного
C
1
2
3
4
5
6
7
8
int ch,count = 0;
cout<<"vedite chislo:";cin>>ch;
for(int i=0;i<SIZE;i++) // SIZE - размер масива
{
if(A[i] == ch; // А - масив
count++;
}
cout<<"Chislo "<<ch<<" povtorayetsa "<<count<<" raz.";
для двухвымерного
C
1
2
3
4
5
6
7
8
9
10
11
int ch,count = 0;
cout<<"vedite chislo:";cin>>ch;
for(int i=0;i<SIZE1;i++) // SIZE1 - количество строк
{
for(int j=0;j<SIZE2;j++)// SIZE2 - количество столюцов
{
if(A[i][j] == ch; // А - масив
count++;
}
}
cout<<"Chislo "<<ch<<" povtorayetsa "<<count<<" raz.";
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
24.01.2010, 11:45     N!= 1*2*3*...*N #3
Цитата Сообщение от Radjuk Посмотреть сообщение
if(A[i] == ch; // А - масив
Очепятка для 3-го задания
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
24.01.2010, 15:35     N!= 1*2*3*...*N #4
1. Кол-во нулей в N! считается по очень простой формуле
k = N / 5;

Добавлено через 1 час 56 минут
Ошибся я, простите мне ребята!
Код
  k = 0;
  for (j=5; j<=N; j*=10) k+= N/j;
Добавлено через 23 минуты
Опять ошибся! День Такой!
Вместо 10 д.б. 5
Код
k = 0;
for(j=5; j<=N;j+=5) {
   n = j;
   while ((n%5)==0) {
       k ++;
       n /= 5;
   {
}
Кажется так.
Но уверенности уже нет
Radjuk
 Аватар для Radjuk
134 / 68 / 12
Регистрация: 10.10.2009
Сообщений: 187
24.01.2010, 15:58     N!= 1*2*3*...*N #5
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Очепятка для 3-го задания
да в 3 там надо скобку закрыть как для 1 так и для 2
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
25.01.2010, 11:05     N!= 1*2*3*...*N #6
Кол-во нулей считается очень просто.
Нужно все числа от 1 до N разложить на простые множители.
На самом деле нас интересует сколько раз в разложении встречается 2 и сколько раз 5.
Пусть 2 встречается p2 раза, 5 - p5 раз.
Тогда число нулей в N! будет c0= min(p2,p5).

Добавлено через 2 минуты
Код примерное такой:
C
1
2
3
4
5
6
7
8
int n, p2= 0, p5= 0, c0, t;
 
n= 100;
t= n;
while ( t%2 == 0 ) { p2++; t/= 2; }
while ( t%5 == 0 ) { p5++; t/= 5; }
c0= (p2<=p5) ? p2 : p5;
printf( "zero count=%d\n", c0 );
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
25.01.2010, 11:17     N!= 1*2*3*...*N #7
odip, попрубуй запустить, то что ты написал!
И сам увидишь, что комментарии излишни
smithy69
17 / 16 / 1
Регистрация: 06.11.2009
Сообщений: 167
25.01.2010, 11:40     N!= 1*2*3*...*N #8
для первого.
нахождение факториала:
C++
1
2
3
4
5
6
7
8
9
int fact(int chislo, int ymnozh)
{
 if (chislo!=0) {
                     ymozh*=chislo;
                     chislo--;
                     fact(chislo,ymnozh);
                   }
return ymnozh;
}
как то так.
Для нахождения количества нулей:
C++
1
2
3
4
5
6
7
8
9
10
11
int kol_nyl(int chislo)
int a,schet=0;
a=chislo%10;
if (a==0) schet++;
do
{
  chislo/=10;
  a=chislo%10;
  if (a==0) schet++; 
}
while (a!=0)
код избыточен, но для начала пойдёт.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.01.2010, 11:47     N!= 1*2*3*...*N #9
Day, Вы наверное не уловили мысль.
odip же написал:
Цитата Сообщение от odip Посмотреть сообщение
Нужно все числа от 1 до N разложить на простые множители.
А пример привел только для одного числа (в данном случае для 100). Т.е. если мы ищем кол-во нулей в числе 100! , то код odip нужно применять и к 100 (как в данном случае), и для всех остальных чисел от 2 до 99. И в конце получится нужный нам результат.
mirso
523 / 341 / 17
Регистрация: 05.04.2009
Сообщений: 709
25.01.2010, 12:02     N!= 1*2*3*...*N #10
odip,
Цитата Сообщение от odip Посмотреть сообщение
while ( t%2 == 0 ) { p2++; t/= 2; }
Цитата Сообщение от odip Посмотреть сообщение
c0= (p2<=p5) ? p2 : p5;
Двоек - валом!
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>
 
int main ()//================================================================
{
        const size_t fact = 1001;
        size_t null_counter = 0;
        
    for ( size_t i = 0; i <= fact; i++ )
    {   
            null_counter = 0;
                  
        for ( size_t j = i; j/5 > 0; j /= 5 )
        {
            null_counter += j/5;        
        }
        //------------------------------------
        std::cout << " The Factorial " << i
                  << " contains the zeroes == "
                  << null_counter << std::endl;
    }
        
    system ( "pause" );
    return 0;
}//==========================================================================
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
25.01.2010, 18:33     N!= 1*2*3*...*N #11
Чтобы не спорили выложу полный код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main( void ) {
 
int n, p2= 0, p5= 0, c0, t, n2;
 
n= 100;
 
for ( n2= 2; n2<=n; n2++ ) {
    t= n2;
    while ( t%2 == 0 ) { p2++; t/= 2; }
    while ( t%5 == 0 ) { p5++; t/= 5; }
}
 
c0= (p2<=p5) ? p2 : p5;
printf( "zero_count=%d\n", c0 );
 
return 0;
 
}
Добавлено через 3 минуты
Да - можно считать только 5-ки, потому что двоек действительно много
Yandex
Объявления
25.01.2010, 18:33     N!= 1*2*3*...*N
Ответ Создать тему
Опции темы

Текущее время: 00:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru