Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
ermolin778
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 20
#1

Написать подпрограмму, которая определяет, делится ли число на «3» без остатка

05.06.2013, 10:41. Просмотров 2353. Ответов 11
Метки нет (Все метки)

1)Написать подпрограмму, которая определяет, делится ли число на «3» без остатка,
не используя деления и определения остатка от деления. Проверку осуществлять на
числах более 1 млн.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 10:41
Ответы с готовыми решениями:

Написать программу, которая предлагает пользователю ввести число и выводит в консоль все числа, на которые введенное делится без остатка
Написать программу, которая предлагает пользователю ввести число и выводит в...

Написать программу, которая предлагает пользователю ввести число и выводит в консоль все числа, на которые введенное делится без остатка
Написать программу, которая предлагает пользователю ввести число и выводит в...

Определить, делится ли число на 4 без остатка
Дано натуральное число N. Если оно делится на 4, вывести на экран ответ N=4k...

Выяснить, делится ли определённое четырёхзначное число на ряд чисел без остатка
Есть такая тема. Нужно вычислить делится ли определённое четырёхзначное число...

Вывести на экран все числа, на которые заданное число делится без остатка
Нужно написать программу с использованием процедуры, которая выводит на экран...

11
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.06.2013, 12:04 #2
Если сумма цифр в числе делится на 3, то и число делится на 3. Только вот для определения суммы цифр нужно делить на 10 и брать остаток от деления на 10. Так нельзя?
0
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
05.06.2013, 12:28 #3
Цитата Сообщение от Tulosba Посмотреть сообщение
Только вот для определения суммы цифр нужно делить на 10 и брать остаток от деления на 10. Так нельзя?
Использовать строки

Добавлено через 1 минуту
Цитата Сообщение от ermolin778 Посмотреть сообщение
не используя деления и определения остатка от деления
Хотя сумму цифр тоже как-то проверять нужно.

Добавлено через 2 минуты
А тут можно таки сумму еще раз на цифры разбить и сложить, так повторять пока сумма не станет меньше 10, а там сравнить с 9, 6 и 3.
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.06.2013, 12:49 #4
kazak, да, тут надо рекурсивно сумму считать пока <10 не получится. А если со строками, то вот так:
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
#include <iostream>
#include <string>
#include <sstream>
#include <cstdlib>
 
std::string to_string( int value )
{
    std::stringstream s;
    s << value;
    return s.str();
}
 
int sum( std::string s )
{
    int res = 0;
    for( int i=s.length()-1; i>=0; --i )
    {
        res += s[i] - '0';
    }
 
    if( res > 9 )
    {
        return sum( to_string(res) );
    }
    return res;
}
 
int sum( int value )
{
    return sum( to_string( value ) );
}
 
bool is3div( int value )
{
    switch( sum( value ) )
    {
        case 3:
        case 6:
        case 9: return true;
    }
    return false;
}
 
int main()
{
    int value; 
    std::cin >> value;
    std::cout << std::boolalpha << is3div( value ) << std::endl;
    std::system( "pause" );
    return 0;
}
0
Мимино
183 / 154 / 34
Регистрация: 22.05.2013
Сообщений: 450
Записей в блоге: 1
05.06.2013, 12:50 #5
Признаки делимости
На пальцах: раскладываем наше число А в последовательность до того момента, пока An не будет меньше 3. Если An = 0, то число делится на 3. Единственная операция, которая используется при этом - "-"
Пример. A = A0 = 18
A1 = 15
A2 = 12
...
An = 0 // значит число делится на 3.
З.Ы. Это "в лоб" без использования "/" и "%"
0
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
05.06.2013, 12:58 #6
Мимино, а в случае очень больших чисел?

Цитата Сообщение от Tulosba Посмотреть сообщение
return s.str();
По моему при выходе из функции s должна быть уничтожена?
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.06.2013, 12:59 #7
Цитата Сообщение от kazak Посмотреть сообщение
По моему при выходе из функции s должна быть уничтожена?
Так str() возвращает std::string, которая копируется по значению при return.
0
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
05.06.2013, 13:00 #8
Tulosba, я б таки вообще на замарачивался на преобразование, в вводил бы число прямо в строку. В случае больших чисел удобнее.
0
Мимино
183 / 154 / 34
Регистрация: 22.05.2013
Сообщений: 450
Записей в блоге: 1
05.06.2013, 13:01 #9
Цитата Сообщение от kazak Посмотреть сообщение
Мимино, а в случае очень больших чисел?
Будет очень долго считать
Конечно, сравнение суммы < 10 c 3 6 9 будет быстрее.
0
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
05.06.2013, 13:03 #10
Цитата Сообщение от Tulosba Посмотреть сообщение
Так str() возвращает std::string,
А, я со string::str() спутал.

Добавлено через 1 минуту
Цитата Сообщение от kazak Посмотреть сообщение
я со string::str() спутал.
Которая c_str()
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.06.2013, 13:06 #11
Цитата Сообщение от kazak Посмотреть сообщение
я б таки вообще на замарачивался на преобразование, в вводил бы число прямо в строку. В случае больших чисел удобнее.
Можно и так. Но тогда не помешает добавить проверку isdigit() на каждый символ. ТС хотел на числах >1млн. С int'ом он получит до >2млрд. Запас в 2000 раз.
0
kazak
05.06.2013, 13:38     Написать подпрограмму, которая определяет, делится ли число на «3» без остатка
  #12

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Запас в 2000 раз.
Или всего 4 разряда, тут с какой стороны посмотреть:)

0
05.06.2013, 13:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2013, 13:38
Привет! Вот еще темы с ответами:

Проверить, делится ли без остатка заданное натуральное число на каждую из своих цифр
Мне нужно написать прогу, но нужно выполнить её без использования строк и...

Рассчитать число столбцов в которых какой либо эл. делится без остатка на другой
Рассчитать число столбцов в которых какой либо эл. делится без остатка на...

Делится ли одно натуральное число на другое без остатка, используя операцию вычитания
Напечатать программу через цикл while: Выяснить, делится ли одно натуральное...


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

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

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