С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 30.04.2013
Сообщений: 65
1

Распечатать числа в диапазоне от 1 до N

05.11.2015, 18:52. Показов 1135. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите сделать данное задание
Распечатать числа в диапазоне от 1 до N у которых произведение первой и второй цифры справа равны числу M
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2015, 18:52
Ответы с готовыми решениями:

Распечатать числа в диапазоне от 1 до N, у которых остатки от деления на число Z не превышают числа M
Задача реализуется на основе оператора “for”, нужно распечатать числа в диапазоне от 1 до N, у...

Распечатать числа в диапазоне
Возникла проблема Распечатать числа в диапазоне от 1 до N, у которых произведение первой и второй...

Распечатать числа в диапазоне от 1 до N
Распечатать числа в диапазоне от 1 до N, у которых нет двузначных делителей(не равных числу). ...

Распечатать числа в диапазоне от 1 до N, не оканчивающиеся на цифру K
Код должен запускаться на Borland C.

2
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
05.11.2015, 19:54 2
Лучший ответ Сообщение было отмечено VuU как решение

Решение

C++
1
2
3
4
5
6
int n,m;
    cin >> n >> m;
    for (int i = 10;i <= n;i++) {
        if ((i % 10) * ((i / 10) % 10) == m)
            cout << i << " ";
    }
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
05.11.2015, 21:17 3
VuU, Привожу полный программный код реализации для решения Вашей задачи:
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
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <string>
#include <algorithm>
 
using std::to_string;
using std::string;
using std::stoi;
 
using std::cout;
using std::endl;
 
using std::pow;
using std::reverse;
 
const char kSpacer = ' ';
 
int MultipliedFirstAndSecondFromRightOf(int value) {
  auto whole_value = to_string(value);
 
  if (whole_value.size() > 1) {
    reverse(whole_value.begin(), whole_value.end());
    string first_from_right(1, whole_value[0]);
    string second_from_right(1, whole_value[1]);
    return stoi(first_from_right) * stoi(second_from_right);
  }
  return 0;
}
 
void ShowFirstWay(int n, int m) {
  for (int i = 1; i <= n; ++i) {
    if (MultipliedFirstAndSecondFromRightOf(i) == m) {
      cout << i << kSpacer;
    }
  }
}
 
/// ------------
 
int NthNumberFromRightOfValue(size_t n, int value) {
  return (value / static_cast<int>(pow(10, n))) % 10;
}
 
int FirstNumberFromRightOf(int value) {
  return NthNumberFromRightOfValue(0, value);
}
 
int SecondNumberFromRightOf(int value) {
  return NthNumberFromRightOfValue(1, value);
}
 
int MultipliedFirstAndSecondFromRight(int value) {
  return FirstNumberFromRightOf(value) * SecondNumberFromRightOf(value);
}
 
void ShowSecondWay(int n, int m) {
  for (int i = 1; i <= n; ++i) {
    if (MultipliedFirstAndSecondFromRight(i) == m) {
      cout << i << kSpacer;
    }
  }
}
 
void ShowSeparator() { cout << endl; }
 
int main() try {
  const int n = 1000;
  const int m = 9;
  ShowFirstWay(n, m);
  ShowSeparator();
  ShowSecondWay(n, m);
} catch (...) {
  cout << "Unhandled exception catched";
}
Пруф работоспособности:
http://ideone.com/wlWuZF

Решение поставленной задачи приведено в виде двух разных способов. Отличие состоит в алгоритме нахождения первой и второй цифры числа. В первом случае (MultipliedFirstAndSecondFromRightOf) - для этого используется преобразование числа в строковое представление (to_string) - его последующий переворот (reverse), получение строкового представления первого и 2ого элементов (string first_from_right(1, whole_value[0])), обратное преобразование строки в число (stoi).

Данное решение может обладать достаточно большим потенциалом в контексте нетривиальных заданий (например его не трудно переделать под перемножение каждого числа на нечетной позиции). Кроме того показывает как можно работать со строками в с++ с использованием стандартных функций.

Второе решение (NthNumberFromRightOfValue) - фактически эквивалентно тому, что предложил Dimension, за тем исключением, что способ получения N-той цифры в числе обобщён (10 возводится в степень того номера N который мы ищем, выполняется деление исходного числа на целочисленное представление результата возведения в степень, и от полученного результата берется остаток от деления)
Чтоб было наглядно:
Исходное число 112244
Хотим получить число в 3 позиции справа. (112 -> 2 <- 44)
Берем 10 возводим в степень 2 = 100 (двойка потому-что отсчет начинается с нуля, а не с 1)
Делим 112244 на 1000 без остатка = 1122
Получаем остаток от деления 1122 на 10 = 2
Возвращаем 2.
0
05.11.2015, 21:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2015, 21:17
Помогаю со студенческими работами здесь

Распечатать числа в диапазоне от 1 до N не оканчивающиеся на цифру K
Распечатать числа в диапазоне от 1 до N не оканчивающиеся на цифру K.

Распечатать числа в диапазоне от 1 до N, которые имеют делители 3, 4 и 7
Всем привет. Помогите сделать такие задачи В диалоговом режиме вводится некоторое число N (В...

Распечатать числа в заданном диапазоне у которых количество делителей не менее 3-х
Распечатать числа в диапазоне от 1 до N у которых количество делителей не менее 3-х.

Распечатать числа в диапазоне от 1 до N, у которых есть хотя бы один двухзначный делитель
Ребята как сделать вот такую задачу Распечатать числа в диапазоне от 1 до N, у которых есть хотя бы...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru