Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
maxim12345
2 / 2 / 3
Регистрация: 28.09.2013
Сообщений: 72
#1

Узнать является ли число пятой степенью. Помогите найти ошибку. - C++

05.12.2013, 16:45. Просмотров 1015. Ответов 33
Метки нет (Все метки)

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
#include<stdio.h>
 
int main()
{
    int x,a,b,c,d;
    scanf("%d",&x);
    b=1;
    if(b==x)
    {
       d=1;
       printf("%d", d);
       return 0;
    }
 
    if (x<b)
    {
      d=0;
    }
 
 
    a=0;
 
    c=b;
    while (a<c)
    {
        b=b+1;
        a=a+1;
    }
 
    printf("%d", d);
 
 
 
 
}
попытался написать прогу, которая проверяет, является ли число пятой степенью, но получается бред какой-то. Помогите, пожалуйста. но использовать можно только прибавление 1, умножение и целочисленное деление
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2013, 16:45
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Узнать является ли число пятой степенью. Помогите найти ошибку. (C++):

В целочисленном массиве найти и напечатать те элементы, которые являются степенью 2. Написать функцию, проверяющую, является ли число степенью 2.
В целочисленном массиве найти и напечатать те элементы, которые являются...

Помогите, ГОС экзамен! Является ли число степенью другого числа
Нужно написать программу определения является ли натуральное число степенью...

Определите, является ли число степенью числа 2, и если является, то выведите значение этой степени
Дано натуральное число n. Определите, является ли оно степенью числа 2, и если...

Дано натуральное число n. Определите, является ли оно степенью числа 2, и если является, то выведите значение этой степени
Дано натуральное число n. Определите, является ли оно степенью числа 2, и если...

Является ли число степенью двойки?
Вводится число. Напечатать YES, если оно является степенью двойки, NO - иначе.

Является ли число степенью двойки
Дано натуральное число n. Определите, является ли оно степенью числа 2, и...

33
rescr1pt
34 / 35 / 6
Регистрация: 03.10.2011
Сообщений: 61
05.12.2013, 17:02 #2
является ли число пятой степенью
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
#include <iostream>
using namespace std;
 
int main()
{
    cout<<"Enter n: ";
    int n;
    cin>>n;
    bool flag=true;
 
    while ((n>5)&&(flag))
    {
        if ((n % 5)==0) 
            n/=5;
        else 
            flag=false;  
    }
 
    if ((flag)&&(n%5==0)) 
        cout<<"Yes";
    else 
        cout<<"No";
 
    // pause
    cin.get();
    cin.get();
}
1
maxim12345
2 / 2 / 3
Регистрация: 28.09.2013
Сообщений: 72
05.12.2013, 17:05  [ТС] #3
flag,true, falce - что это такое?
0
rescr1pt
34 / 35 / 6
Регистрация: 03.10.2011
Сообщений: 61
05.12.2013, 17:09 #4
Цитата Сообщение от maxim12345 Посмотреть сообщение
flag,true, falce - что это такое?
булевая переменная, которая будет возвращать отрицательное значение, если n'число не делится на 5.
1
Байт
Эксперт C
17776 / 11801 / 2451
Регистрация: 24.12.2010
Сообщений: 23,726
05.12.2013, 17:12 #5
Цитата Сообщение от maxim12345 Посмотреть сообщение
falce
false - ложь. true - истина (правда) flag - введенная (объявленная) авторм программы логическая (булевая) переменная

Добавлено через 1 минуту
Цитата Сообщение от rescr1pt Посмотреть сообщение
булевая переменная, которая будет возвращать отрицательное значение
Простите, как это?
1
egor2116
571 / 375 / 215
Регистрация: 20.01.2013
Сообщений: 1,135
05.12.2013, 17:15 #6
Как то так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
 int main()
 {
     float numeric, source;
     std::cout << "Input numeric: "; std::cin >> numeric;
     
     source = numeric;
     while(numeric > 1.0f)
        numeric /= 5;
     
     if(numeric == 1) 
        std::cout << source << " is degree 5" << std::endl;
     else
        std::cout << source << " is not degree 5" << std::endl;
     
     system("PAUSE");
     return 0;
 }
1
ValeryS
Модератор
7134 / 5402 / 669
Регистрация: 14.02.2011
Сообщений: 18,227
05.12.2013, 17:17 #7
rescr1pt,
а ты уверен что чтобы узнать пятая ли степень числа нужно делить на 5?
например число 32 =25
ну ни как на пять не делится
2
Байт
Эксперт C
17776 / 11801 / 2451
Регистрация: 24.12.2010
Сообщений: 23,726
05.12.2013, 17:18 #8
Цитата Сообщение от rescr1pt Посмотреть сообщение
(n%5==0)
Вот тут надо здорово подумать. ИМХО, по приоритету сначала выполняется сравнение (5==0). Оно дает false = 0/. Потом вы будете делить на 0. Может быть я с приоритетами и путаю, но чтоб не было таких вопросов, рекомендуется писать
C
1
((n%5)==0)
Сам на эти грабли пару раз наступил, никому не советую...
0
maxim12345
2 / 2 / 3
Регистрация: 28.09.2013
Сообщений: 72
05.12.2013, 17:19  [ТС] #9
Кстати, да. Помогите пожалуйста разрулить
0
ValeryS
Модератор
7134 / 5402 / 669
Регистрация: 14.02.2011
Сообщений: 18,227
05.12.2013, 17:20 #10
я бы попробовал как то так
C++
1
2
3
4
5
int tmp=pow(n,1.0/5.0);
if(tmp*tmp*tmp*tmp*tmp==n)
   printf("Yes");
else
   printf("No");
2
maxim12345
2 / 2 / 3
Регистрация: 28.09.2013
Сообщений: 72
05.12.2013, 17:23  [ТС] #11
А можно это как то в более простом варианте, ибо я новичек, этого не понимаю, да и использовать можно только +1, целочисленное деление, остаток от деления

Добавлено через 1 минуту
а можно поподробнее, ибо я новичек и не понимаю еще этого, да и использовать можно только +1, целочисленное деление и остаток от деления
0
egor2116
571 / 375 / 215
Регистрация: 20.01.2013
Сообщений: 1,135
05.12.2013, 17:25 #12
например число 32 =25
ну ни как на пять не делится
а Вы попробуйте )))
std::cout << 32 / 5;
1
Байт
Эксперт C
17776 / 11801 / 2451
Регистрация: 24.12.2010
Сообщений: 23,726
05.12.2013, 17:28 #13
Цитата Сообщение от ValeryS Посмотреть сообщение
rescr1pt,
а ты уверен
Ну, то что код решает какую-то совсем другую задачу - это ясно.
C++
1
2
3
4
5
6
7
for(flag=i=0; ; i++) {
  k = i*i*i*i*i;
  if (k==n) {
    flag=1; break; }
  if k > n) break;
}
printf (flag ? "Yes" : "No");
Оформление (main, объявления переменных...) я оставил тебе
1
ValeryS
Модератор
7134 / 5402 / 669
Регистрация: 14.02.2011
Сообщений: 18,227
05.12.2013, 17:34 #14
Цитата Сообщение от maxim12345 Посмотреть сообщение
А можно это как то в более простом варианте, ибо я новичек, этого не понимаю, да и использовать можно только +1, целочисленное деление, остаток от деления
интересно как ты узнаешь корень пятой степени оперируя только этими действиями
да и нет у меня ничего сложного
Цитата Сообщение от ValeryS Посмотреть сообщение
int tmp=pow(n,1.0/5.0);
берем корень пятой степени из числа n дробную часть отбрасываем (для этого есть int)
функция pow возводит число в степень, корень пятой степени это 1/5
дальше возводим полученное число в пятую степень
Цитата Сообщение от ValeryS Посмотреть сообщение
tmp*tmp*tmp*tmp*tmp
и сравниваем если полученное произведение равно первоначальному числу
значит первоначальное число является пятой степенью
например
32
корень 2
2*2*2*2*2 равно 32
является
33
корень
2.01232
целое 2
2*2*2*2*2 не равно 33
не является

Добавлено через 1 минуту
Цитата Сообщение от egor2116 Посмотреть сообщение
а Вы попробуйте )))
std::cout << 32 / 5;
и что на самом деле 6
1
rescr1pt
34 / 35 / 6
Регистрация: 03.10.2011
Сообщений: 61
05.12.2013, 17:36 #15
Цитата Сообщение от Байт Посмотреть сообщение
Простите, как это?

Не по теме:

Поймали на слове. В риторическом случаи, false (0) отрицательное, true(1) положительное.
Оправдался считай :D


А о задаче я не додумал.
1
maxim12345
2 / 2 / 3
Регистрация: 28.09.2013
Сообщений: 72
05.12.2013, 17:41  [ТС] #16
мне это нужно будет переписать на язык нашего препода) он очень похож на паскаль, поэтому по возможности бы как заменить циклы на while P.S. с "языком препода" не смейтесь сильно)
0
Байт
Эксперт C
17776 / 11801 / 2451
Регистрация: 24.12.2010
Сообщений: 23,726
05.12.2013, 17:44 #17
Цитата Сообщение от maxim12345 Посмотреть сообщение
"языком препода"
Придется просить новый раздел открывать
2
maxim12345
2 / 2 / 3
Регистрация: 28.09.2013
Сообщений: 72
05.12.2013, 17:45  [ТС] #18
как можно вот тот код без умножения реализовать? его нельзя использовать
0
Байт
Эксперт C
17776 / 11801 / 2451
Регистрация: 24.12.2010
Сообщений: 23,726
05.12.2013, 17:49 #19
Цитата Сообщение от maxim12345 Посмотреть сообщение
без умножения реализовать?
C
1
for(p=j=0; j< i ; j++) p+=i;
Получится i*i
И так еще 2-3 раза...
1
ValeryS
Модератор
7134 / 5402 / 669
Регистрация: 14.02.2011
Сообщений: 18,227
05.12.2013, 17:50 #20
Цитата Сообщение от maxim12345 Посмотреть сообщение
возможности бы как заменить циклы на while
ну вот тебе решение, по мотивам Байт,
C++
1
2
3
4
5
6
7
8
9
10
11
12
int k=1;
bool flag=false;
while(k*k*k*k*k<=n)
{
  if(k*k*k*k*k==n)
  {
  flag=true;
  break; 
  }
k++;
}
printf (flag ? "Yes" : "No");
1
05.12.2013, 17:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2013, 17:50
Привет! Вот еще темы с решениями:

Является ли число степенью десятки
Дано целочисленное число. Проверить является ли оно степенью десяти.

Определить является ли число к степенью 3
Определить является ли число к степенью 3.

Является ли число степенью двойки
Условие: Входные данные Входной файл INPUT.TXT содержит единственное целое...

Проверить, является ли число степенью 3
Данное целое число N ( &gt; 0). Если оно есть степенно числа 3 , то вывести TRUE,...


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

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

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