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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 61, средняя оценка - 4.75
King_IgorEfimoV
1 / 1 / 0
Регистрация: 18.04.2011
Сообщений: 9
#1

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

05.07.2011, 08:25. Просмотров 9419. Ответов 13
Метки нет (Все метки)

Добрый день, написал функцию для определения разрядности числа, однако отказывается работать.
Подправте кто соблаговолит, либо предложите альтернативный вариант.
C++
1
2
3
4
5
6
7
8
9
10
int searchrazryad(long int N)
{
int razryad=0;
for (N%10>10;)
    N/10;
        razryad+=1;
        printf("Kolichestvo razrayadov = %d", &razryad);
 
return razryad;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2011, 08:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить разрядность числа (C++):

Определить разрядность числа - C++
Не получается решить задачи.... 1)Дано целое число. Если оно является однозначным, вывести число 1, если оно является двузначным, вывести...

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

Задать разрядность выводимого числа - C++
Итак, дана программа, результатом работы которой есть вывод в консоль массива чисел. Числа в массиве либо двухзначные, либо трехзначные....

Разрядность(нумерация) элементов числа - C++
Я написал такую вот прогу: #include<iostream> using namespace std; void main() { int a=0, i, n, s; cin>>n; ...

Как определить разрядность .EXE или .DLL? - C++
Как определить разрядность .EXE или .DLL? WINAPI функций вроде для етого нет. Я делаю сортировщик dll файлов. Остановился на том, што...

Разрядность чисел - C++
К примеру я ввожу число :1245 (разрядность 4), 123 (разрядность 3) и так далее Нужно реализовать именно рекурсивно. Вот что и я написала...

13
ValeryLaptev
Эксперт С++
1042 / 821 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
05.07.2011, 08:30 #2
Ну хоть книжку-то почитай, как на С++ пишется...
C++
1
2
3
4
5
int i = 0; 
while(N>0)
{ N = N / 10; ++i;
}
cout << i << endl;
1
King_IgorEfimoV
1 / 1 / 0
Регистрация: 18.04.2011
Сообщений: 9
05.07.2011, 08:32  [ТС] #3
не подскажите еще случаем, как это в виде функции оформить? ( .h )
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.07.2011, 08:38 #4
ValeryLaptev, а как же отрицательные числа?
C++
1
2
3
4
5
6
size_t capacity(int n){
    size_t i = 0;
    for (; n ; n /= 10)
        ++i;
    return i;
}
2
Bogdan1986
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 4
10.11.2015, 13:48 #5
все работает, определяет разрядность 32 разрядного числа и делит и находит (2^30)/x


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
52
53
54
55
56
57
58
59
60
61
62
int x=1024; 
int a=x; 
int n=0; 
int b=0; 
int sum=0; 
int c=1; 
int sum2=0; 
 
 
 
 
if((16)>0) 
{ 
a=(16); 
n=n+16; 
} 
if((8)>0) 
{ 
a=(8); 
n=n+8; 
} 
if((4)>0) 
{ 
a=(4); 
n=n+4; 
} 
if((2)>0) 
{ 
a=(2); 
n=n+2; 
} 
if((1)>0) 
{ 
a=(1); 
n=n+1; 
} 
if(a==1) 
{ 
a=(1); 
n=n+1; 
} 
 
b=(30-n); 
c=(30-n); 
 
for(int i=0;i<(30-n);i++) 
{ 
 
if(1073741824-(sum+b)>0) 
{ 
sum=b+sum; 
sum2=c+sum2; 
} 
 
b=1; 
c=1; 
 
} 
 
 
System.out.println(sum2); 
System.out.println(n);
Добавлено через 28 минут
будем добавлять до миллиона скажем
14 - 0 сумма 999 982
28 - 0 сумма 999 982
56 - 1 сумма 999 982
112-0 сумма 999 926
224-0 сумма 999 926
448-0 сумма 999 926
896 -0 сумма 999 926
1792-0 сумма 999 926
3584 -1 сумма 996342 + 3584 = 999 926
7168 -1 сумма 989 174+7168 = 996 342
14 336 - 1 сумма 974 838+14 336 = 989 174
28 672 -0
57 334 - 1 сумма 917 504+57 334=974 838
114 688 - 0
229 376 - 0
458 752 - 0 сумма 917 504 так как 917 504+458 752 больше миллиона
917 504 - 1 сумма 917 504
1 835 008 - 0 число уже больше милиона сумма 0

итак смотрите снизу вверх
получаем число
10001011100000100 - вот такое вот число
переведем его из двоичного в десятиричное
получили число 71 428
и теперь если умножить 71 428 на 14 получим 999 992
с точностью до шестого знака
и при таких вычислениях мы не применяли умножений только суммы
и разности
0
ishellstrike
77 / 13 / 7
Регистрация: 23.10.2015
Сообщений: 83
10.11.2015, 15:15 #6
к слову самый быстрый способ узнать число десятичных цифр -- это сравнить по-очереди с числами 9, 99, 999, 9999... Если речь не идет о каких-то специфических процессорах
0
Dimension
Dimension
569 / 438 / 135
Регистрация: 08.04.2014
Сообщений: 1,709
Завершенные тесты: 1
10.11.2015, 15:23 #7
спустя 4 года британские ученые нашли ответ на вопрос King_IgorEfimoV

Добавлено через 1 минуту
Цитата Сообщение от ishellstrike Посмотреть сообщение
к слову самый быстрый способ узнать число десятичных цифр
думаю взять десятичный логарифм от числа быстрее
0
Bogdan1986
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 4
10.11.2015, 16:04 #8
Вобщето нет , для 32 разрядного числа как видишь 6 проверок
а для 64 разрядного будет 7
посмотри внимательнее этот способ куда быстрее чем проверять 9 , 99 ...
так как у 64 разрядного числа уже 19 знаков , а значит надо будет целых 19 проверок
в то время как в моем случае это будет всего 7

Добавлено через 1 минуту
да и не всегда нужно проверять разрядность именно десятичного, чаще нужно проверить именно двоичную разрядность

Добавлено через 12 минут
ты даже не обратил внимание на тот факт что тут произведено деление 16 разрядного числа помещенного в 32 разрядное
1 умножение +100 сумм = 132 суммы
16*16=256 т.е. разница в 2 и больше раз, да и точность в 32 разряда не малая
для простых процессоров таких как на видеокарте это ускорит паралельное деление в 2 раза для 32 разрядных
чисел где применяется только 16 разрядов
А если взять 64 разрядный процессор там 20 знаков есть место для шага
Число сумм возростет вдвое витоге это будет 164 суммы для 32 разрядов из 64
а 32*32 = 1024
1024/164 = 6.24 раз ускориться, это огромные числа с огромной точностью и в 6 раз быстрее
0
pproger
164 / 67 / 13
Регистрация: 22.03.2011
Сообщений: 196
10.11.2015, 16:30 #9
King_IgorEfimoV,
C++
1
cout << to_string(abs(number)).length() << endl;
0
Bogdan1986
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 4
10.11.2015, 16:34 #10
да кстати я чета перебрал с суммами где их и не надо было
я еще подускорил алгоритм
Java
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
52
53
54
55
56
57
58
59
60
61
62
63
int x=23876;
        int a=x;
        int n=0;
        int b=0;
        int sum=0;
        int c=1;
        int sum2=0;
        int k;
        
        
        
 
        if((a>>16)>0)
        {
        a=(a>>16);  
        n=n+16;
        }
        if((a>>8)>0)
        {
        a=(a>>8);   
        n=n+8;
        }
        if((a>>4)>0)
        {
        a=(a>>4);   
        n=n+4;
        }
        if((a>>2)>0)
        {
        a=(a>>2);   
        n=n+2;
        }
        if((a>>1)>0)
        {
        a=(a>>1);   
        n=n+1;
        }
        if(a==1)
        {
        a=(a>>1);   
        n=n+1;
        }
        
        b=x<<(30-n);
        c=c<<(30-n);
        
        for(int i=0;i<(30-n);i++)
        {
            
        if(1073741824-(k=sum+b)>0)  
        {
        sum=k;  
        sum2=c|sum2;
        }   
        
        b=b>>1; 
        c=c>>1;
        
        }
        
        
        System.out.println(sum2);
        System.out.println(n);
0
ishellstrike
77 / 13 / 7
Регистрация: 23.10.2015
Сообщений: 83
10.11.2015, 16:51 #11
Bogdan1986, Dimension, а вот и не быстрее
0
Dimension
Dimension
569 / 438 / 135
Регистрация: 08.04.2014
Сообщений: 1,709
Завершенные тесты: 1
10.11.2015, 17:08 #12
ishellstrike, статья с 13 минусами меня не впечатляет
0
ishellstrike
77 / 13 / 7
Регистрация: 23.10.2015
Сообщений: 83
10.11.2015, 17:20 #13
Dimension, в таком случае рекомендую самостоятельные тесты
0
Bogdan1986
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 4
10.11.2015, 18:21 #14
если ты хочешь только разрядность найти а 1/x не нужен то тебе только вот эта часть кода нужна
Java
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
int x=23876;
int a=x;
int n=0;
 
 
 
 
 
if((16)>0)
{
a=(16); 
n=n+16;
}
if((8)>0)
{
a=(8); 
n=n+8;
}
if((4)>0)
{
a=(4); 
n=n+4;
}
if((2)>0)
{
a=(2); 
n=n+2;
}
if((1)>0)
{
a=(1); 
n=n+1;
}
if(a==1)
{
a=(1); 
n=n+1;
}
 
 
 
 
 
 
System.out.println(n);
0
10.11.2015, 18:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2015, 18:21
Привет! Вот еще темы с ответами:

разрядность команд - C++
Добрый день, Всех с праздником! Подскажите, пожалуйста, определение термина &quot;разрядность команд&quot;. P.S. искал в интернете, ничего...

Cygwin на windows и разрядность - C++
Попробовал скомпилировать приложение на win7 x64. Установил Cygwin для windows x64, в итоге приложение получилось только для windows x64, а...

Определить, что куб суммы цифр числа равен квадрату числа - C++
Кто может решите пожалуйста задачу с помощью циклов. Задание 5: Пользователь вводит целое число А. Программа должна определить, что куб...

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


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

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

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