Форум программистов, компьютерный форум, киберфорум
Наши страницы

Задачи для тренировки и лучшего понимания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Возможно переписать программу? http://www.cyberforum.ru/cpp/thread153534.html
Есть программа Upgrade UA.exe хочу запустить ее на windows mobile 6. Возможно ли ее переписать.
C++ scanf Пусть нужно читать из текста слова, пропуская все символы, кроме a-z и A-Z. То есть из текста Hello, world! ololo O_o получить только Hello world ololo O o Меня интересует, можно ли это... http://www.cyberforum.ru/cpp/thread153153.html
C++ Вернуть stdin в консоль
Допустим я перенаправил поток stdin/stdout в файл с помощью функции freopen. Как заставить его снова работать с консолью? Добавлено через 9 минут Нашел. #include <cstdlib> #include <stdio.h>...
Прошу помочь.Подключение dll на неуправляемом С/С++ C++
Возникла проблема.Есть рабочая dll, необходимо подключить к CLR приложению. Подключение происходит нормально. Все функции работают нормально кроме одной(хотя dll проверял все работает в обычных...
C++ Не сразу закрывающаяся программа http://www.cyberforum.ru/cpp/thread152799.html
Есть команды в терминале.. вроде telnet или sql, эти программы запускаешь и они остаются открытыми пока не дашь команду, например, quit. Во время работы программы она показывает знак приглашения...
C++ Парсер на С вопшем есть файл с текстом..... в етом файле есть какие даные(мусор)...и есть дни: Понедельник,Вторник,среда......с етого файла нада вывести ети дни в порядке нахождениэ... ето походу несложная... подробнее

Показать сообщение отдельно
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
28.01.2011, 10:37
Суть решения заключается вот в чем:
При умножении двух различных чисел последняя ненулевая цифра всегда равна цифре, которая получается если умножить между собой только две последних ненулевых цифры этих чисел. Это правило характерно для всех умножаемых чисел, за исключением чисел оканчивающихся на цифру 5.
Примеры:
9246*427=36503596332
или 6*7=42
У обоих получившихся чисел последнее число равно 2
Для чисел оканчивающихся на цифру 5, такой вариант бывает не проходит, например:
12*5=60
2*5=10
Получается все дело в последней цифре перемножаемых чисел - равны они 5-ке или нет.
Можете сами подумать над этим, или потестировать, но это факт:
При умножении двух различных чисел последняя ненулевая цифра всегда равна цифре, которая получается если умножить между собой только две последних ненулевых цифры этих чисел. Это правило характерно для всех умножаемых чисел, за исключением чисел оканчивающихся на цифру 5.
Вот код с сохранением только последней ненулевой цифры (все входящие простые множители 5 (в число N!), объединяются с простыми множителями 2):
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
#include <stdio.h>
 
int main(){
   int n, i, j, k=5, km=0, f=1;
     freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);
 
   scanf("%d", &n);
   while(n/k>0)
   {
       km+=n/k;
       k*=5;
   }
   for(i=2; i<=n; i++)
   {
       j=i;
       while(j%5==0)
       {
           j/=5;
       }
           while(km>0 && j%2==0)
           {
               km--;
               j/=2;
           }
           f=(f*(j%10))%10;       
   }
   printf("%d", f);               
        return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru