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

Нахождение факториала: для заданного N найти последнюю отличную от нуля цифру - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Функция, в функции main() или общие переменные для нескольких функций http://www.cyberforum.ru/cpp-beginners/thread684614.html
Делаю мелкую игрушку, в консоли, ради забавы и столкнулся с 1 проблемой: Невозможно, создавать функцию в функции, вынеся эту функцию за пределы main() И скомпилировав, написало, что эта функция ссылается на переменные, которые ВНЕ зоны ЕЁ видимости. Попытавшись, вытащить за пределы main() все переменные, мне написало, что эти переменные, ВООБЩЕ НИКОМУ не принадлдежат! Так вот в чем вопрос:...
C++ Сортировка строк матрицы Задача: отсортировать (переставить) строки матрицы в порядке убывания значений наименьших элементов строк. Вот мой код. Помогите написать функцию Swap которая сортирует строки. #include <iostream> #include <stdlib.h> #include <ctime> using namespace std; const int size = 5; http://www.cyberforum.ru/cpp-beginners/thread684612.html
C++ Вывести некий элемент массива
Почему пишет что переменная V неопределена? И вобше как тогда вывести первый отрицательний елем. массива, и первый положетильний, идущий после первого отрицательного?#include<iostream> #include<conio.h> #include<stdlib.h> #include<locale.h> using namespace std; int main() { setlocale(LC_ALL,"ukrainian"); int n; int* arr;
C++ Программа вычисления местонахождения точки относительно фигуры (лежит ли точка внутри, на контуре или вне фигуры)
Нужно написать программу вычисления местонахождения точки относительно фигуры(лежит ли данная точка внутри неё, на контуре или вне фигуры). В данном случае, это прямоугольник. Главная функция должна вызывать 4 дополнительных:введение параметра контура, введение координат,определение местонахождения и выведение определенного сообщения. Координаты вершин прямоугольника (–a,0), (a,0), (a,a), (–a,a)....
C++ Не производиться ввод при помощи функции gets(s) http://www.cyberforum.ru/cpp-beginners/thread684572.html
По непонятной мне причине не производиться ввод при помощи функции gets(s) или getline(cin, s). Если использовать просто cin, то проблем нет: //Рекурсия. Вычисление факториала. Функция, возвращающая // наибольший общий делитель. Функция возращающая строку в обратном // порядке. #include <iostream> #include <cstdlib> #include <cstdio> using namespace std;
C++ Указатель и рекурсия Подскажите почему не работает? (логика работы программы изложена в комментах к ней) #include <iostream> #include <windows.h> #include <string.h> #include <stdio.h> using namespace std; void reverse(char *s); int main() подробнее

Показать сообщение отдельно
RESTY
5 / 5 / 0
Регистрация: 30.05.2012
Сообщений: 89
30.10.2012, 22:28     Нахождение факториала: для заданного N найти последнюю отличную от нуля цифру
Факториалом натурального числа N (обозначается как N!) называется произведение всех натуральных чисел от 1 до N. Например, 5! = 1*2*3*4*5 = 120. Требуется написать программу, позволяющую для заданного N находить последнюю отличную от нуля цифру в числе N!
Исходные данные
В первой строке записано натуральное K<=1000. В каждой из следующих K строк записано очередное число Ni, для которого нужно получить ответ (1<=Ni<=1000000).
Результат
Выведите K цифр, каждую в отдельной строке

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

Добавлено через 1 час 50 минут

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
34
35
36
#include <iostream>
 
int ch(int &a){
        int k,s,t,i,j;
        k = a / 5;
        s = 0;
        while ( k > 0){
                s += k;
                k /= 5;
        }
        t = 1;
        for (int i = 2; i <= a; i++){
                j = i;
                while ( j % 5 == 0){
                        j /= 5;
                }
                while ( s > 0 && j % 2 == 0){
                        j /= 2;
                        s -= 1;
                }
                t = t * ( j % 10 ) % 10;
        }
        return t;
}
 
 
int main(){
        int n,a;
        std::cin >> n;
        for (int i = 0; i < n; i++){
                std::cin >> a;
                std:: cout <<ch(a)<<std::endl;
        }
        std::system("pause");
        return 0;
}
вот то что я придумал но как это уже понятно мой алгоритм не проходит по времени
есть у кого какие мысли?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru