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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Движение точки http://www.cyberforum.ru/cpp-beginners/thread131483.html
Очень нужна помощь с таким заданием: написать движение точки по ломанному пути( туда и обратно ) на входе: массив точек - узлы ломанного пути и скорость точки( пиксел в секунду ) ...
C++ Написать рекурсивную функцию вычисления сочетания n то k Вот проблемка Написать рекурсивную функцию вычисления сочетания n то k. http://www.cyberforum.ru/cpp-beginners/thread131481.html
Сумма чисел C++
Дано натуральное число N. Вставить между некоторыми цифрами 1,2,3,4,5,6,7,8,9, записанными именно в таком порядке, знаки "+" и "-" так, чтобы значением получившегося выражения было число N. Например,...
Ссылки и адреса C++
Вот, где лучше всего использовать адреса и ссылки? Просто не много не понятня для чего это все. Вот например эту запись int mas; int* pmas=&mas Чесно говоря, даже не понятно всего удобства. Зачем...
C++ Перевод кода из Паскаля в С++ http://www.cyberforum.ru/cpp-beginners/thread131445.html
Я в С++ не бум бум, написал прогу на паскале а нуно на Си++ помогите перевести Задача : Назовем допустимым преобразованием матрицы перестановку двух строк или двух столбцов. Дана действительная...
C++ Последовательность фибоначи Дан фаил f компоненты u0,u1,....un которого являются последовательными числами Фибоначчи, получить в фаиле f последовательные числа Фибоначчи u0,u1,....u n+1(тобиж u эное +1) сама... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
19.05.2010, 07:43
alex_x_x, ваш пример неверно работает с числами, имеющими ноль в середине. Например выводит 701, 702.
Мне кажется, если писать понятнее, то меньше ошибок.
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
//Найти все натуральные числа, которые не превышают заданного N и делятся 
//на каждую из своих цифр.
#include <iostream>
#include <sstream>
 
const int N = 702;
 
bool delitsja_na_vse_cifry(int num)
{
    std::stringstream potok;
    potok << num;
    char dig_symb;   
    while(potok >> dig_symb)          
    {
        int dig = dig_symb - '0';
        if(dig && num % dig != 0) return false;        
    }
    return true;
}
 
int main()
{
    for(int cur_num = 1; cur_num <= N; ++cur_num)
    {
        if(delitsja_na_vse_cifry(cur_num))
        {
            std::cout << cur_num << std::endl;
        }
    }
    return 0;
}
Добавлено через 9 часов 56 минут
Я в предыдущем примере ноль за отсутствие цифры посчитал. Наверно вот так будет правильнее:
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
//Найти все натуральные числа, которые не превышают заданного N и делятся 
//на каждую из своих цифр.
#include <iostream>
#include <sstream>
 
const int N = 702;
 
bool delitsja_na_vse_cifry(int num)
{
    std::stringstream potok;
    potok << num;
    char dig_symb;   
    while(potok >> dig_symb)          
    {
        int dig = dig_symb - '0';
        if(!dig || num % dig != 0) return false;          
    }
    return true;
}
 
int main()
{
    for(int cur_num = 1; cur_num <= N; ++cur_num)
    {
        if(delitsja_na_vse_cifry(cur_num))
        {
            std::cout << cur_num << std::endl;
        }
    }
    return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru