Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
ashta
9 / 9 / 4
Регистрация: 28.08.2012
Сообщений: 65
1

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

28.08.2012, 14:21. Просмотров 4593. Ответов 11
Метки нет (Все метки)

Вывести все 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;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2012, 14:21
Ответы с готовыми решениями:

Найти числа, которые делятся без остатка на сумму своих цифр
Как єто сделать? Используя функцию Sum Digits, разработайте программу,...

Вывести все целые числа, на которые оба введенных числа делятся без остатка
Пользователь вводит два целых числа. Необходимо вывести все целые числа, на...

Вывести все целые числа, на которые оба введенных числа делятся без остатка
Пользователь вводит два целых числа. Необходимо вывести все целые числа, на...

Вывести все трехзначные числа, которые делятся на суму своих цифр
Вывести все трехзначные числа, которые делятся на суму своих цифр #include...

Найти все числа в заданном диапазоне, которые делятся на сумму своих цифр.
Написать программу, содержащую не менее двух функций в разных файлах .c (.cpp),...

11
-=ЮрА=-
Заблокирован
Автор FAQ
28.08.2012, 15:18 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/0b71472a4ee397609dea9a13e9b26bca
1000000 % 1 = 0
1000002 % 3 = 0
1000006 % 7 = 0
1000008 % 9 = 0
1000010 % 2 = 0
1000011 % 3 = 0
1000012 % 4 = 0
1000014 % 6 = 0
....
1
Миниатюры
Вывести все 6-ти значные числа, которые делятся без остатка на сумму своих цифр  
ashta
9 / 9 / 4
Регистрация: 28.08.2012
Сообщений: 65
28.08.2012, 15:49  [ТС] 3
Спасибо большое, Юра, за подсказку. Теперь знаю, в каком направлении думать, чтобы решить ее с помощью той информации, которой владею на данный момент. Еще не знаю, что такое long и Е6 - Е7 (я так понимаю это диапазон?). В любом случае, Вы очень мне помогли.
0
valeriikozlov
Эксперт С++
4687 / 2513 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
28.08.2012, 15:50 4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
for(long i = 1E6; i < 1E7; i++)
заменить на:
C++
1
for(long i = 1E5; i < 1E6; i++)
1
DaskOFF
112 / 112 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
28.08.2012, 16:06 5
Цитата Сообщение от ashta Посмотреть сообщение
Спасибо большое, Юра, за подсказку. Теперь знаю, в каком направлении думать, чтобы решить ее с помощью той информации, которой владею на данный момент. Еще не знаю, что такое long и Е6 - Е7 (я так понимаю это диапазон?). В любом случае, Вы очень мне помогли.
1E6 = 1 000 000
1E7 = 10 000 000
1
ashta
9 / 9 / 4
Регистрация: 28.08.2012
Сообщений: 65
28.08.2012, 16:22  [ТС] 6
Спасибо всем за помощь, но мне решение в такою ключе не подойдет -Е6-Е7, нужно адаптировать под то, что я этого еще знаю.
0
-=ЮрА=-
Заблокирован
Автор FAQ
28.08.2012, 18:18 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/9e7dfe86a04315f9885a8c5a80c49da0
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, т..е если в задачах используем дабл, флоат, инт всё понятно чуть шаг в сторону и приводим тип для тех же целых что и инт всё полные непонятки (до сих пор не пойму в ВУЗах, что забывают рассказать о типах переменных?:scratch:)


Теперь об этом
Цитата Сообщение от valeriikozlov Посмотреть сообщение
аменить на:
Код C++
1
for(long i = 1E5; i < 1E6; i++)
Я неверно трактовал 6-ти значное, т.е в моём представлении это была единица и 6-ть ноликов(т.е изначально посчитал что задача подразумевала рассматривать числа в диапазоне 1000000 до 9999999), на самом деле 6-ти значное число это число в котором всех цифр 6-ть (тобишь от 100000 до 999999)
0
ashta
9 / 9 / 4
Регистрация: 28.08.2012
Сообщений: 65
29.08.2012, 23:03  [ТС] 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;
0
-=ЮрА=-
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-ти значных, что отимальней решать уж вам...

0
Catstail
Модератор
23742 / 11823 / 2069
Регистрация: 12.02.2012
Сообщений: 19,229
30.08.2012, 10:09 10
Цитата Сообщение от ashta Посмотреть сообщение
Нашла решение в том ключе, котором от нас требуется
Цитата Сообщение от ashta Посмотреть сообщение
if (i%(i/100000+i/10000%10+i/1000%10+i/100%10+i/10%10+i%10)==0)
- Ох... И кто же этот садист, такое ТРЕБУЮЩИЙ?
0
ashta
9 / 9 / 4
Регистрация: 28.08.2012
Сообщений: 65
30.08.2012, 10:11  [ТС] 11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение

Не по теме:

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

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

Юра, я согласна, что Ваше решение компактнее, но для начинающего в изучении с++ когда мы такого еще не изучали я могу пока решить только так. Я взяла Ваше решение на заметку и когда мы придем к этой теме, я думаю смогу решить так как предлагаете Вы.
0
-=ЮрА=-
Заблокирован
Автор FAQ
30.08.2012, 10:15 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); 
}
не более...
0
30.08.2012, 10:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2012, 10:15

Вывести на экран все трехзначные числа, которые делятся на последнюю из своих цифр
Вывести на экран все трехзначные числа, которые делятся на последнюю из своих...

Найти все такие М-значные числа, которые делятся на каждую из цифр в их записи
Найти все такие М-значные числа (М=2,3...), которые делятся на каждую из цифр в...

Вывести в цикле те цифры числа, которые не делятся на 3 без остатка.
Вывести только те цифры числа, которые не делятся на 3 без остатка.


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru