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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
ermolin778
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 18
#1

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

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

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

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

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

Определить, делится ли число на 4 без остатка - C++
Дано натуральное число N. Если оно делится на 4, вывести на экран ответ N=4k (где k — соответствующее частное); если остаток от деления...

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

Рассчитать число столбцов в которых какой либо эл. делится без остатка на другой - C++
Рассчитать число столбцов в которых какой либо эл. делится без остатка на другой. Не пойму в чём проблема. Считает не правильно...( ...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4395 / 3238 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.06.2013, 12:04 #2
Если сумма цифр в числе делится на 3, то и число делится на 3. Только вот для определения суммы цифр нужно делить на 10 и брать остаток от деления на 10. Так нельзя?
0
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
05.06.2013, 12:28 #3
Цитата Сообщение от Tulosba Посмотреть сообщение
Только вот для определения суммы цифр нужно делить на 10 и брать остаток от деления на 10. Так нельзя?
Использовать строки

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

Добавлено через 2 минуты
А тут можно таки сумму еще раз на цифры разбить и сложить, так повторять пока сумма не станет меньше 10, а там сравнить с 9, 6 и 3.
0
Tulosba
:)
Эксперт С++
4395 / 3238 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
05.06.2013, 12:50 #5
Признаки делимости
На пальцах: раскладываем наше число А в последовательность до того момента, пока An не будет меньше 3. Если An = 0, то число делится на 3. Единственная операция, которая используется при этом - "-"
Пример. A = A0 = 18
A1 = 15
A2 = 12
...
An = 0 // значит число делится на 3.
З.Ы. Это "в лоб" без использования "/" и "%"
0
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
05.06.2013, 12:58 #6
Мимино, а в случае очень больших чисел?

Цитата Сообщение от Tulosba Посмотреть сообщение
return s.str();
По моему при выходе из функции s должна быть уничтожена?
0
Tulosba
:)
Эксперт С++
4395 / 3238 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.06.2013, 12:59 #7
Цитата Сообщение от kazak Посмотреть сообщение
По моему при выходе из функции s должна быть уничтожена?
Так str() возвращает std::string, которая копируется по значению при return.
0
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
05.06.2013, 13:00 #8
Tulosba, я б таки вообще на замарачивался на преобразование, в вводил бы число прямо в строку. В случае больших чисел удобнее.
0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
05.06.2013, 13:01 #9
Цитата Сообщение от kazak Посмотреть сообщение
Мимино, а в случае очень больших чисел?
Будет очень долго считать
Конечно, сравнение суммы < 10 c 3 6 9 будет быстрее.
0
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
05.06.2013, 13:03 #10
Цитата Сообщение от Tulosba Посмотреть сообщение
Так str() возвращает std::string,
А, я со string::str() спутал.

Добавлено через 1 минуту
Цитата Сообщение от kazak Посмотреть сообщение
я со string::str() спутал.
Которая c_str()
0
Tulosba
:)
Эксперт С++
4395 / 3238 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2013, 13:38
Привет! Вот еще темы с ответами:

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

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

Найти ближайшее целое к первому числу, которое делится на второе число без остатка - C++
Пользователь вводит два числа. Определить, делится одно число на второе без остатка. Если нет, предложить ближайшее целое, которое...

Дано натуральное четырехзначное число. Определить все цифры в цифровой записи данного числа, на которые оно делится без остатка - C++
Дано натуральное четырехзначное число. Определить все цифры в цифровой записи данного числа, на которые оно делится без остатка. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.06.2013, 13:38
Ответ Создать тему
Опции темы

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