Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Astonjke
29 / 29 / 18
Регистрация: 21.12.2009
Сообщений: 79
1

Есть ли число степенью 2 (Массив)

18.10.2010, 01:41. Просмотров 518. Ответов 3
Метки нет (Все метки)

Задано вектор из целых чисел X[n] (n<=16). Сформировать массив К из тех элементов вектора Х, которые являются степенью числа 2.
Ошибка в 14 строке "invalid operands of types "float" and "double" to bynary 'operator%' ".
Если этим способом "log(x[i])/log(2)" сделать нельзя, помогите пожалуйста написать через цикл деления на 2 (я в Си ламер, пробовал написать так, программа зацикливается).

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <math.h>
 
int main()
{
    const int n=15;
    int x[n],k[n], i=0,j=0;
    float tmp;
    printf("\nZapolnite masiv X...\n");
    for (;i<=n;i++) {
                     printf("X[%i]=",i+1);
                     scanf("%i",&x[i]);
                     tmp=log(x[i])/log(2);
                     if ( (tmp%1.0)==0) {   //Проверяем, есть ли tmp целым числом
                                         k[j]=x[i];
                                         j++;
                                        }
                    }
    for (i=0;i<j;i++) printf("%i ",k[i]);
 
    return 1;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2010, 01:41
Ответы с готовыми решениями:

Дано натуральное число n>1. Проверить является ли число n степенью 2
Дано натуральное число n&gt;1. Проверить является ли число n степенью 2. Программа должна вывести...

Является ли число k степенью 3
Логической переменной t присвоить значение True или False в зависимости от того, является...

Определить, является ли число M степенью N
Ввести натуральные числа М и N &lt; M. Определить, является ли число M степенью N. Программу оформить...

Проверка, является ли число степенью 3
собственно надо ввести число, и проверить, является ли это число степенью числа 3. опыта в...

Является ли число степенью тройки (цикл while)
Определить с помощью цикла while, является ли число степенью тройки. Что- то я и так и эдак, не...

3
Nameless One
Эксперт С++
5793 / 3442 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
18.10.2010, 04:50 2
Решено не делением, а наоборот, умножением на 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
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 <stdio.h>
#include <stdlib.h>
 
#define N 15
 
void fill(size_t* arr)
{
    size_t i;
    for(i = 0; i < N; ++i)
    {
        printf("%u > ", i + 1);
        scanf("%u", arr + i);
    }
}
 
void print(size_t* arr, size_t n, char a)
{
    size_t i;
    for(i = 0; i < n; ++i)
        printf("%c[%u] = %u\n", a, i + 1, arr[i]);
}
 
size_t func(size_t* a1, size_t* a2)
{
    size_t i, k = 0;
    size_t j;
    for(i = 0, j = 1; i < N; ++i, j = 1)
    {
        while(a1[i] > j)
            j <<= 1;
            
        if(a1[i] == j)
            a2[k++] = a1[i];
    }
    return k;
}
 
int main(void)
{
    size_t X[N];
    size_t k[N];
    printf("Inpun array X:\n");
    fill(X);
    printf("This is X:\n");
    print(X, N, 'X');
    size_t M = func(X, k);
    printf("This is k:\n");
    print(k, M, 'k');
    
    return EXIT_SUCCESS;
}
1
taras atavin
4207 / 1774 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
18.10.2010, 05:40 3
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
bool IsDegree (int x, int a)
{
 int b;
 if (a==1)
 {
  if (x>0)
  {
   return true;
  }
  return false;
 }
 if (x<a)
 {
  retrun false;
 }
 for (b=x;b>=a;b/=a)
 {
  if ((b%a)>0)
  {
   return false;
  }
 }
 return true;
}
Эта функция проверяет делением, является ли любое целое положительное число целой степенью любого другого целого положительного числа. Первый параметр - проверяемое число, второй - основание степени.
1
Nameless One
Эксперт С++
5793 / 3442 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
20.10.2010, 13:21 4
Открыл для себя очень эффективный способ проверки, является ли число степенью двойки. Число n - степень двойки тогда, когда выполняется равенство:
C
1
(!(n & (n - 1))
Вот программа с использованием этой проверки (строка 28):
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
#include <stdio.h>
#include <stdlib.h>
 
#define N 15
 
void fill ( size_t* arr )
{
    size_t i;
    for ( i = 0; i < N; ++i )
    {
        printf ( "%u > ", i + 1 );
        scanf ( "%u", arr + i );
    }
}
 
void print ( size_t* arr, size_t n, char a )
{
    size_t i;
    for ( i = 0; i < n; ++i )
        printf ( "%c[%u] = %u\n", a, i + 1, arr[i] );
}
 
size_t func ( size_t* a1, size_t* a2 )
{
    size_t i, k = 0;
    size_t j;
    for ( i = 0, j = 1; i < N; ++i, j = 1 )
        if ( ! ( a1[i] & ( a1[i] - 1 ) ) )
            a2[k++] = a1[i];
    return k;
}
 
int main ( void )
{
    size_t X[N];
    size_t k[N];
    printf ( "Inpun array X:\n" );
    fill ( X );
    printf ( "This is X:\n" );
    print ( X, N, 'X' );
    size_t M = func ( X, k );
    printf ( "This is k:\n" );
    print ( k, M, 'k' );
 
    return EXIT_SUCCESS;
}
Добавлено через 48 секунд
И не нужно никаких умножений/делений на два
2
20.10.2010, 13:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2010, 13:21

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

Определить, является ли число степенью другого числа
Составить подпрограмму, определяющую , является ли число степенью другого числа.

Определить, является ли натуральное число n степенью числа 3
Определить, является ли натуральное число n степенью числа 3


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

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

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