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

Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.64
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
28.08.2012, 14:21     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр #1
Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр. подсчитать кол-во

Решаю ее в таком ключе, подскажите, пожалуйста, в каком месте ошибка и как изменить алгоритм решения?

int sum=0, kol=0;

for (int i=100000; i<=999999; i++)
{
if (i%sum==0)
{

sum=sum+i%10;
i=i/10;
kol=kol+1;
}
else continue;

}

cout<<"kolichestvo="<<kol<<endl;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2012, 14:21     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр
Посмотрите здесь:

Найти все числа в заданном диапазоне, которые делятся на сумму своих цифр. C++
C++ Вывести числа в диапазоне от 0 до 500.которые делятся на 5 без остатка
C++ Найти все натуральные числа, не превосходящие заданного n, которые делятся на каждую из своих цифр
Вывести в цикле те цифры числа, которые не делятся на 3 без остатка. C++
Вывести на экран все трехзначные числа, которые делятся на последнюю из своих цифр C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
28.08.2012, 15:18     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр #2
ashta, вот корректный алгоритм
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
    long buf   = 0;
    long sum   = 0;
    for(long i = 1E6; i < 1E7; i++)
    {
        buf = i;
        sum = buf % 10;
        while(0 < (buf /= 10))
            sum += buf % 10;
        if(i % sum == 0)//Äåëèòñÿ ГЎГҐГ§ îñòГ*ГІГЄГ*
            cout<<i<<" % "<<sum<<" = 0\n";
    }
    return 0;
}
http://liveworkspace.org/code/0b7147...ea9a13e9b26bca
1000000 % 1 = 0
1000002 % 3 = 0
1000006 % 7 = 0
1000008 % 9 = 0
1000010 % 2 = 0
1000011 % 3 = 0
1000012 % 4 = 0
1000014 % 6 = 0
....
Миниатюры
Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр  
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
28.08.2012, 15:49  [ТС]     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр #3
Спасибо большое, Юра, за подсказку. Теперь знаю, в каком направлении думать, чтобы решить ее с помощью той информации, которой владею на данный момент. Еще не знаю, что такое long и Е6 - Е7 (я так понимаю это диапазон?). В любом случае, Вы очень мне помогли.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
28.08.2012, 15:50     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
for(long i = 1E6; i < 1E7; i++)
заменить на:
C++
1
for(long i = 1E5; i < 1E6; i++)
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
28.08.2012, 16:06     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр #5
Цитата Сообщение от ashta Посмотреть сообщение
Спасибо большое, Юра, за подсказку. Теперь знаю, в каком направлении думать, чтобы решить ее с помощью той информации, которой владею на данный момент. Еще не знаю, что такое long и Е6 - Е7 (я так понимаю это диапазон?). В любом случае, Вы очень мне помогли.
1E6 = 1 000 000
1E7 = 10 000 000
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
28.08.2012, 16:22  [ТС]     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр #6
Спасибо всем за помощь, но мне решение в такою ключе не подойдет -Е6-Е7, нужно адаптировать под то, что я этого еще знаю.
-=ЮрА=-
Заблокирован
Автор FAQ
28.08.2012, 18:18     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр #7
Цитата Сообщение от ashta Посмотреть сообщение
Спасибо всем за помощь, но мне решение в такою ключе не подойдет -Е6-Е7, нужно адаптировать под то, что я этого еще знаю.
- DaskOFF, правильно написал
Цитата Сообщение от DaskOFF Посмотреть сообщение
1E6 = 1 000 000
1E7 = 10 000 000
. Программисты рациональный народ - поэтому чтобы каждый раз не вбивать Н-ое число нулей язык содержит специальный формат ввода для ввода десятичной мантиссы, а именно Е а далее идёт число разрядов т.е. int v = 100 эквивалентно int v = 1E2 а десять в 6-й 1000000 равно 1Е6 а 2 на 10 в шестой это 2Е6 что тут не понятного

Не по теме:

Попробуйте сделать ввод 2E6 для этого кода и будете приятно удивлены

Код
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
 
int main()
{
    int val = 0;
    cout<<"Enter val : ";cin>>val;//Прямо в консоли при англ раскладке вбейте 2E6
    cout<<val<<endl;//Увидите что ввели
    return 0;
}



Хорошо давайте проанализируем Ваш код указав на ошибки:

Цитата Сообщение от ashta Посмотреть сообщение
nt sum=0,kol=0;
- сумма и количество равны ную до цикла, тобишь в самом цикле они только будут накапливаться. Вы понимаете, что для каждого числа отдельно должны сумму и число цифр накапливать?От того у вас и не работало, потому что суммировались все значения разрядов чисел и kol также накапливало общее количество во всех числах.
Далее что вас тут пугает
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for(long i = 1E6; i < 1E7; i++)
или в каком ключе записано, что вы понять не можете?
А вот такой код вам понятен???
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
    int buf   = 0;
    int sum   = 0;
    for(int i = 100000; i < 1000000; i++)
    {
        buf = i;
        sum = buf % 10;
        while(0 < (buf /= 10))
            sum += buf % 10;
        if(i % sum == 0)//Делится без остатка
            cout<<i<<" % "<<sum<<" = 0\n";
    }
    return 0;
}
http://liveworkspace.org/code/9e7dfe...5a8c5a80c49da0
100000 % 1 = 0
100002 % 3 = 0
100008 % 9 = 0
100010 % 2 = 0
100011 % 3 = 0
100012 % 4 = 0
100014 % 6 = 0
100016 % 8 = 0
...

Не по теме:

Я кажется понимаю что смутил тип long, т..е если в задачах используем дабл, флоат, инт всё понятно чуть шаг в сторону и приводим тип для тех же целых что и инт всё полные непонятки (до сих пор не пойму в ВУЗах, что забывают рассказать о типах переменных?)


Теперь об этом
Цитата Сообщение от valeriikozlov Посмотреть сообщение
аменить на:
Код C++
1
for(long i = 1E5; i < 1E6; i++)
Я неверно трактовал 6-ти значное, т.е в моём представлении это была единица и 6-ть ноликов(т.е изначально посчитал что задача подразумевала рассматривать числа в диапазоне 1000000 до 9999999), на самом деле 6-ти значное число это число в котором всех цифр 6-ть (тобишь от 100000 до 999999)
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
29.08.2012, 23:03  [ТС]     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр #8
Всем спасибо за помощь. Нашла решение в том ключе, котором от нас требуется!!!! Делюсь решением.


int sum=0, kol_vo=0;

for (int i=100000; i<=999999; i++)
{
if (i%(i/100000+i/10000%10+i/1000%10+i/100%10+i/10%10+i%10)==0)

{
cout<<i<<endl;
kol_vo=kol_vo+1;
}

else continue;

}
cout<<"kol_vo="<<kol_vo<<endl;
-=ЮрА=-
30.08.2012, 01:14
  #9

Не по теме:

ashta, вот это

Цитата Сообщение от ashta Посмотреть сообщение
if (i%(i/100000+i/10000%10+i/1000%10+i/100%10+i/10%10+i%10)==0)
и заменяет вот этот цикл
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(0 < (buf /= 10))
* * * * * * sum += buf % 10;
Вот представьте если надо будет 20-ти или вообще невесть какое н-значное число разобрать, вы тоже будете н условных операторов писать?В принципе дело ваше, похвально что вы решили по своему, но применимость такого решения крайне узкая(цикл отработает и для 2-х значных и н-значных), ваш алгоритм исключительно для 6-ти значных, что отимальней решать уж вам...

Catstail
Модератор
 Аватар для Catstail
21501 / 10254 / 1670
Регистрация: 12.02.2012
Сообщений: 17,139
30.08.2012, 10:09     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр #10
Цитата Сообщение от ashta Посмотреть сообщение
Нашла решение в том ключе, котором от нас требуется
Цитата Сообщение от ashta Посмотреть сообщение
if (i%(i/100000+i/10000%10+i/1000%10+i/100%10+i/10%10+i%10)==0)
- Ох... И кто же этот садист, такое ТРЕБУЮЩИЙ?
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
30.08.2012, 10:11  [ТС]     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение

Не по теме:

ashta, вот это
и заменяет вот этот цикл

Вот представьте если надо будет 20-ти или вообще невесть какое н-значное число разобрать, вы тоже будете н условных операторов писать?В принципе дело ваше, похвально что вы решили по своему, но применимость такого решения крайне узкая(цикл отработает и для 2-х значных и н-значных), ваш алгоритм исключительно для 6-ти значных, что отимальней решать уж вам...

Юра, я согласна, что Ваше решение компактнее, но для начинающего в изучении с++ когда мы такого еще не изучали я могу пока решить только так. Я взяла Ваше решение на заметку и когда мы придем к этой теме, я думаю смогу решить так как предлагаете Вы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2012, 10:15     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
30.08.2012, 10:15     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр #12
ashta, так ведь я использую тоже целочисленное деление / и остаток от целочисленного деления что и вы % вам должно быть вот это не понятно
buf = i;
sum = buf % 10;
while(0 < (buf /= 10))
sum += buf % 10;
Дык это просто компатная запись этого
C++
1
2
3
4
5
6
7
buf = i;
sum = buf % 10;
while(0 < buf)
{
     buf = buf / 10;
     sum = sum + (buf % 10); 
}
не более...
Yandex
Объявления
30.08.2012, 10:15     Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр
Ответ Создать тему
Опции темы

Текущее время: 07:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru