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

Подсчитать количество различных цифр в десятичной записи натурального числа - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как узнать Handle или PID процесса, зная его имя и класс? http://www.cyberforum.ru/cpp-beginners/thread634006.html
Как узнать Handle или PID процесса, зная его имя и класс?
C++ Непонятное условие задачи Напишите перегруженные версии функции iquote(), которая отображает аргументы, заключенные в двойные кавычки. Напишите три версии: одну для аргумента типа int, другую для аргумента типа double и третью для аргумента типа string. Я сначала вот так подумал сделать. void iquote(const int n); void iquote(const double n); void iquote(const string n); Или вот так: void iquote(const char... http://www.cyberforum.ru/cpp-beginners/thread633999.html
C++ Объявление заголовочных файлов
Скажите в чем разница между объявлением вида: #include <iostream> и вида #include "iostream"
C++ Перегрузка [][]
Возможно ли для данного класса обеспечить перегрузку жвойных скобок с тем, чтобы в программе можно было использовать выражения типа: MyClass
C++ Закрытия MessageBox http://www.cyberforum.ru/cpp-beginners/thread633875.html
Добрый день как программно можно закрыть окно MessageBox без нажатия кнопки OK
C++ motion blur Здравствуйте. Моя задача состоит в том, чтоб реализовать эффект motion blur по любой заданной пользователем траектории. Вопрос следующий - как задавать ядро свёртки? Пока получается криво даже для вектора 45 градусов. Возможно, посоветуете какую-то литературу, как работать с коеффициентами ядра? подробнее

Показать сообщение отдельно
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
06.08.2012, 23:22     Подсчитать количество различных цифр в десятичной записи натурального числа
Alic, как вариант решения на базе restoring division

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <iterator>
#include <set>
#include <limits>
 
typedef std::pair <unsigned, unsigned> Division;
 
Division RestoringDivision(unsigned num, unsigned denum) {
   unsigned zero = 0x00;
   unsigned t;
   Division result;
   std::size_t bits = std::numeric_limits <unsigned>::digits;
   for (std::size_t i = 1; i <= bits; i++) {
      t = zero >> (bits - 1);
      zero = (zero << 1) | (num >> (bits - 1));
      num = num << 1;
      if ((zero | t) >= denum) {
         zero = zero - denum;
         num = num + 1;
      }
   }
   result.first = num;
   result.second = zero;
   
   return result;
}
 
template <typename T, unsigned NUMBER>
struct GetDigit : public std::unary_function <void, T> {
   static std::size_t current_digit;
   T operator()() const {
      unsigned temp = NUMBER;
      unsigned result;
      Division q = { temp, 0 };
      for (std::size_t i = 0; i < current_digit; i++) {
         Division remainder = RestoringDivision(q.first, 10);
         q = RestoringDivision(q.first, 10);
         result = remainder.second;
      }
      current_digit++;
      
      return result;
   }
};
 
const unsigned number = 72019120;
 
template <typename T, unsigned NUMBER>
std::size_t GetDigit <T, NUMBER>::current_digit = 1;
 
int main() {
   std::vector <unsigned> v_numbers(std::to_string(number).size());
   std::generate(
      v_numbers.begin(),
      v_numbers.end(),
      GetDigit <unsigned, number>()
   );
   std::set <unsigned> unique_digits(v_numbers.begin(), v_numbers.end());
   
   std::cout << unique_digits.size();
}
http://liveworkspace.org/code/79d3df...34f047f0f58d8f
 
Текущее время: 09:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru