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

Определить, делится ли это число на 15 - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Ildan
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 10
26.11.2013, 15:15     Определить, делится ли это число на 15 #1
"Пользователь вводит двоичное число. Нужно определить делится ли это число на 15."
Я написал программу которая переводит двоичное число в десятичное и делит на 15.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
 
int main()
{
    setlocale (LC_ALL, "Russian");
    cout << "Введите двоичное число(длина числа не превышает 10000 двоичных разрядов)" << endl;
    string s;  
    cin>>s;
    int n=0;
    for(int i=s.length()-1;i>=0;i--) 
    {
        if(s[s.length()-i-1]=='1')  
            n=n+pow(2.0,i); 
    }
    if(n%15==0)
        cout<<"Делится";
    else
        cout<<"Не делится";
    system ("Pause>>void");
}
Но загвоздка заключается в том, что мне после проверки выполненной работы, поставили условие: что введенное двоичное число не должно переводится в десятичную СС, а программа должна сразу проверять делится оно на 15 или нет. Т.е. если пользователь вводит, например 1110102(3010) и это число надо разделить на 11112(1510)
Есть ли в С++ возможность, работать с двоичными числами или все намного сложнее. Помогите с этим вопросом, пожалуйста! В С++ я новичок и сам не смог разобраться=(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2013, 15:15     Определить, делится ли это число на 15
Посмотрите здесь:

C++ Дано целое число N. Найдите все такие целые числа d, что N делится на d2 и не делится на d3.
C++ Число делится на 11, если разность между суммой цифр на четных и нечетных местах делится на 11
Определить, делится ли число на 4 без остатка C++
C++ перевод строки в число, определить делится ли оно на 4
C++ Проверить гипотезу: если сумма цифр числа делится на 3, то и само число делится на 3
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
26.11.2013, 15:31     Определить, делится ли это число на 15 #2
Цитата Сообщение от Ildan Посмотреть сообщение
работать с двоичными числами
Как с десятичными - нет.

А что является признаком деления на 15 в двоичной системе - я хз... Четность/нечетность - тут и ежу понятно, а вот на 15 ...
Ildan
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 10
26.11.2013, 19:27  [ТС]     Определить, делится ли это число на 15 #3
мда, нужны эксперты
Yamko
11 / 11 / 2
Регистрация: 10.03.2013
Сообщений: 104
26.11.2013, 19:54     Определить, делится ли это число на 15 #4
Если я правильно понял ваше задание, то у меня получилось интересная "зависимость". Идея немного глуповато, но по идее должно сработать.
Я взял числа, которые кратны 15 и представил их в бинарной системе, вот что получилось:
1111=15
11110=30
101101=45
111100=60
1001011=75
1011010=90
1111000=120
10010110=150
10110100=180
Проверил с умножением: 15*40=600 в бинарной 600=1001011000.
не трудно заметить, что число кратно 15, когда кол-во единиц в бинарном представлении = 4.
(Придумал сам, нигде не смотрел, так что на свой трах и тд...)

Попробовал дальше по умножать, у этого способа есть предел, какой не выяснил.
Ildan
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 10
26.11.2013, 22:44  [ТС]     Определить, делится ли это число на 15 #5
Интересная зависимость. По условию задачи число вводит пользователь, и если я вас правильно понял надо ставить условие если в введенном числе 4 единицы число делится на 15, но если он введет например 100110012(15310), то число по условию подойдет, но оно не будет истинным.

Добавлено через 1 час 6 минут
походу дела, задачка не решаема(

Добавлено через 1 час 26 минут
Ни у кого больше нет идей? самому в голову ничего не приходит(
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
26.11.2013, 22:59     Определить, делится ли это число на 15 #6
Цитата Сообщение от Ildan Посмотреть сообщение
Есть ли в С++ возможность, работать с двоичными числами
нет
есть десятичные шестнадцатеричные и восьмеричные СС
Цитата Сообщение от Ildan Посмотреть сообщение
Ни у кого больше нет идей? самому в голову ничего не приходит(
есть одна идея но реализации нет
откажись от стринга и используй массив
потом из полученного числа вычитай 1111
потом проверяй результат
если 0 то делится
если не 0 и больше 1111 то еще раз вычитай
если меньше 1111 то не делится

Добавлено через 2 минуты
чтобы убыстрить можно проверить идут ли подряд четыре единицы
если да то делится
если 4 в конце то точно делится

Добавлено через 2 минуты
Цитата Сообщение от Ildan Посмотреть сообщение
cout << "Введите двоичное число(длина числа не превышает 10000 двоичных разрядов)" << endl;
* * string s; *
* * cin>>s;
* * int n=0;
это точно не сработает в int только 32 разряда

Добавлено через 1 минуту
Цитата Сообщение от Yamko Посмотреть сообщение
не трудно заметить, что число кратно 15, когда кол-во единиц в бинарном представлении = 4.
число 255 (11111111) кратно 15 но единиц ни как не 4
Yamko
11 / 11 / 2
Регистрация: 10.03.2013
Сообщений: 104
26.11.2013, 23:03     Определить, делится ли это число на 15 #7
Цитата Сообщение от ValeryS Посмотреть сообщение
Добавлено через 1 минуту

число 255 (11111111) кратно 15 но единиц ни как не 4
Уже знаю, способ придумал за 2 мин, но как оказалось он не удачен.
Про идею вычитания. Как вы собираетесь реализовать алгоритм вычитания в двоичной системе?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
26.11.2013, 23:09     Определить, делится ли это число на 15 #8
Цитата Сообщение от Yamko Посмотреть сообщение
Как вы собираетесь реализовать алгоритм вычитания в двоичной системе?
для начала все числа в компьютере лежат в двоичном виде
и расчеты процессор ведет в двоичном виде так что вопрос не корректен
правильнее было бы как реализовать вычитание массивов, поскольку число будет в массиве лежать
не готов ответить задачка не тривиальная
можно например массив сделать булевый и использовать логические операторы
а вообще как в школе столбиком
Yamko
11 / 11 / 2
Регистрация: 10.03.2013
Сообщений: 104
26.11.2013, 23:15     Определить, делится ли это число на 15 #9
Цитата Сообщение от ValeryS Посмотреть сообщение
для начала все числа в компьютере лежат в двоичном виде
и расчеты процессор ведет в двоичном виде так что вопрос не корректен
Знаем, учили. В силу малых знаний ++ и возник вопрос. Использование логический функций заманчиво, но нужно как-то реализовать займ/перенос.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
26.11.2013, 23:38     Определить, делится ли это число на 15 #10
ну например можно так
пишу на коленке возможны недочеты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int arr1[100];// массив числа
int arr2[4]={1,1,1,1};// массив числа 15 
for( int i=0;i<4;i++) //цикл для разрядов
 {
  arr1[i]-=arr2[i];// вычитаем 
  if( arr1[i]==-1) // если число отрицательное значит идет заем
   {
      arr1[i]&=0x01;// переводим в положительное 
     for(int j=i+1;j<100;j++) // цикл для заема
      {
        arr1[j]--;  // вычитаем 1 из следующего разряда, заем
         if(arr1[j]>-1) // если результат положительный 
             break;  // то дальше идти не надо выходим из цикла 
         arr1[i]&=0x01;// делаем число положительным 
     
       }    
   } 
 }
Ildan
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 10
26.11.2013, 23:51  [ТС]     Определить, делится ли это число на 15 #11
Цитата Сообщение от ValeryS Посмотреть сообщение
ну например можно так
пишу на коленке возможны недочеты
вот дополнил, чтобы она запускалась.

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
#include <iostream>
#include <stdio.h>
using namespace std;
int main ()
{
int arr1[100];   // Г¬Г*Г±Г±ГЁГў Г·ГЁГ±Г«Г*
int arr2[4]={1,1,1,1};  // Г¬Г*Г±Г±ГЁГў Г·ГЁГ±Г«Г* 15 
for( int i=0;i<4;i++)   //öèêë äëÿ Г°Г*çðÿäîâ
 {
  arr1[i]-=arr2[i];  // âû÷èòГ*ГҐГ¬ 
  if( arr1[i]==-1)   // åñëè ÷èñëî îòðèöГ*òåëüГ*îå Г§Г*Г*Г·ГЁГІ èäåò Г§Г*ГҐГ¬
   {
      arr1[i]&=0x01;   // ïåðåâîäèì Гў ïîëîæèòåëüГ*îå 
     for(int j=i+1;j<100;j++)   // öèêë äëÿ Г§Г*ГҐГ¬Г*
      {
        arr1[j]--;    // âû÷èòГ*ГҐГ¬ 1 ГЁГ§ ñëåäóþùåãî Г°Г*çðÿäГ*, Г§Г*ГҐГ¬
         if(arr1[j]>-1)   // åñëè ðåçóëüòГ*ГІ ïîëîæèòåëüГ*ûé 
             break;    // ГІГ® Г¤Г*ëüøå èäòè Г*ГҐ Г*Г*äî âûõîäèì ГЁГ§ öèêëГ* 
         arr1[i]&=0x01;   // äåëГ*ГҐГ¬ ÷èñëî ïîëîæèòåëüГ*ûì 
     
       }    
   } 
 }
 system ("Pause>>void");
}
Но почему-то после запуска, если нажмешь любую клавишу программа прекращает работу. Не поскажете что не так в коде?)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
26.11.2013, 23:57     Определить, делится ли это число на 15 #12
Цитата Сообщение от Ildan Посмотреть сообщение
Но почему-то после запуска, если нажмешь любую клавишу программа прекращает работу. Не поскажете что не так в коде?)
ну дак все не так
это я показал реализацию вычитания
а для полной программы нужно вводить данные, как у тебя в начале
затем сделать вычитание сравнить остаток
если больше или равно 15 вычесть еще раз
если меньше то проверить равно 0 значит делится не равно не делится
Ildan
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 10
27.11.2013, 00:10  [ТС]     Определить, делится ли это число на 15 #13
Цитата Сообщение от ValeryS Посмотреть сообщение
ну дак все не так
Если вас не затруднит, объясните что делает написанный вами код, и что мне делать после этого.
P.S. Я в С++ почти ничего не знаю. Начали учить месяца 3 назад, а тут уже такие задания(
ya_noob
_
200 / 144 / 9
Регистрация: 08.10.2011
Сообщений: 432
27.11.2013, 08:37     Определить, делится ли это число на 15 #14
Ildan, для решения задачи достаточно посчитать сумму цифр заданного числа, переведенного в систему счисления по основанию x. догадайтесь чему равен x.
zzzvolk
0 / 0 / 0
Регистрация: 15.10.2013
Сообщений: 11
27.11.2013, 09:05     Определить, делится ли это число на 15 #15
а зачем все множить тоесть есть число ! надо проверить делиться ли оно на 15
мы просто будем добавлять по 15 за ход до поки != $
$-это сума +15 за ход
если не !<$ то не делиться и все
Ildan
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 10
27.11.2013, 11:54  [ТС]     Определить, делится ли это число на 15 #16
ya_noob,можно по-подробнее, я толком не понял ваши мысли
Цитата Сообщение от ya_noob Посмотреть сообщение
переведенного в систему счисления по основанию x
но по условию задачи, введенное двоичное число нельзя переводить в другие СС((
ya_noob
_
200 / 144 / 9
Регистрация: 08.10.2011
Сообщений: 432
27.11.2013, 12:48     Определить, делится ли это число на 15 #17
Цитата Сообщение от Ildan Посмотреть сообщение
введенное двоичное число не должно переводится в десятичную СС
Цитата Сообщение от Ildan Посмотреть сообщение
введенное двоичное число нельзя переводить в другие СС((
определитесь!

а вообще число полностью не нужно переводить в другую СС, только его цифры.

насчет х: это задача из теории чисел: число в СС по основанию k делится на k - 1 если сумма его цифр делится на k - 1. если хотите, то можете попробовать доказать. идея такая: разложите число в многочлен по степеням k, поделите на k - 1 и рассмотрите остаток от деления.
Ildan
0 / 0 / 0
Регистрация: 26.11.2013
Сообщений: 10
27.11.2013, 14:05  [ТС]     Определить, делится ли это число на 15 #18
ya_noob,
Цитата Сообщение от ya_noob Посмотреть сообщение
определитесь!
задание такое, что программа должна работать только в двоичной СС. используя признаки деления на 15. т.к. признак деления на 15 нет, то возможно нужно работать с признаками деления на 3 и 5 (3*5=15). Но дело в том, что я не знаю как это реализовать в программе((
ya_noob
_
200 / 144 / 9
Регистрация: 08.10.2011
Сообщений: 432
27.11.2013, 14:40     Определить, делится ли это число на 15 #19
так чему равно x ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2013, 15:15     Определить, делится ли это число на 15
Еще ссылки по теме:

Если a делится на b или b делится на a, то вывести 1, иначе – любое другое число C++
C++ Найти натуральное число M такое, что M делится на N и сумма цифр M делится на N
C++ Если а делится на b или b делится на а, то вывести 1, иначе— любое другое число

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

Или воспользуйтесь поиском по форуму:
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
27.11.2013, 15:15     Определить, делится ли это число на 15 #20
не совсем понятно...
http://basicschool.ru/index.php?page...www.google.ru/
Yandex
Объявления
27.11.2013, 15:15     Определить, делится ли это число на 15
Ответ Создать тему
Опции темы

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