Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/56: Рейтинг темы: голосов - 56, средняя оценка - 4.93
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
1

Сколько цифр в числе степени двойки?

02.07.2012, 13:22. Показов 10599. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать программу, сколько чисел будет в n-ной степени двойки.
Например:
В 22 будет 1 знак.
В 216 - 5 знаков.
Вводится число n, а выводится вычисленное количество знаков. Число n влазит в тип int.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.07.2012, 13:22
Ответы с готовыми решениями:

Определить сколько цифр в заданном числе, найти сумму цифр, и последнюю цифру
дано натуральное число n (n<10000). определить сколько цифр, найти сумму цифр, и последнюю цифру....

Определить сколько цифр в заданном натуральном числе, и чему равна сумма его цифр
Дано натуральное число n (n<=100). Определить сколько цифр в числе n, чему равна сумма его цифр.

Сколько столбцов в матрице не содержит ни одной степени двойки?
Сколько столбцов в матрице не содержит ни одной степени двойки? Решение задачи без использования...

Определить сколько цифр в числе n, чему равна сумма его цифр
Дано натуральное число n. Определить: сколько цифр в числе n, чему равна сумма его цифр.

21
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
02.07.2012, 13:27 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <string>
 
int main()
{
    unsigned int n;
    
    std::cout << "Etner n: " << std::endl;
    std::cin >> n;
    
    std::cout << "Answer: " << std::to_string(static_cast<unsigned int>(pow(2., static_cast<double>(n)))).length() << std::endl;
    
    system("Pause");
    return EXIT_SUCCESS;
}
0
1 / 1 / 0
Регистрация: 15.06.2012
Сообщений: 59
02.07.2012, 13:35 3
Попробуй, должно работать но проверить не на чем.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int getCount(int a){
    int i = 0;
    while(a>0) { a /= 10; ++i;}
    return i;
}
 
int main(void){
    cout << "Enter N: 2^";
    short n; int num=1;
    cin >> n;
    for(short i=0; i<n; i++){ num*=2; }
    cout << "\nNumber: " << num << "\nResult: " << getCount(num);
    return 0;
}
0
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
02.07.2012, 13:38 4
Sky-WaLkeR, если исправить синтаксические ошибки, то код работает правильно
а проверять можно тут http://liveworkspace.org/code/... 1cd84d7b50
1
1 / 1 / 0
Регистрация: 15.06.2012
Сообщений: 59
02.07.2012, 13:42 5
Да, ошибочки есть Просто только что писал на другом языке, там синтаксис другой, вот и отвык. Вроде все исправил.
За ссылку спасибо.
0
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
02.07.2012, 13:48  [ТС] 6
Вы точно правильно написали to_string? У меня не работает. А функции я очень плохо знаю
0
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
02.07.2012, 13:49 7
точно правильно, просто нужен компилятор с поддержкой нового стандарта
0
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
02.07.2012, 13:52  [ТС] 8
Фигня. Я ввёл 64, а оно выдало 0 вместо 19! А я имел ввиду вообще чтобы вычисляло до 200000000 и выше. Я просто работаю с длинными числами и мне нужно знать количество знаков например В 128-битном числе, и выше.
0
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
02.07.2012, 13:59 9
128 битное число нельзя представить каким-либо стандартным типом
пишите длинную арифметику
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
02.07.2012, 13:59 10
На больших числах будет неточно работать, ибо числа вещественные.
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <cmath>
 
int main()
{
    int n;
    std::cin >> n;
    std::cout << static_cast< int > (n * std::log10(2.0) + 1) << std::endl;
}
0
56 / 28 / 18
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
02.07.2012, 14:02  [ТС] 11
Да вот точный алгоритм:
1 - log(2) (заметьте - не ln, а log!);
2 - отбрасываем остаток.
3 - прибавляем еденицу!
Кто реализует функцию log?

Добавлено через 30 секунд
А, спасибо, уже реализовано!
0
программист С++
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
02.07.2012, 14:04 12
хотя можно и таким способом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cmath>
 
unsigned long long int value(unsigned long long int n)
{
    return static_cast<unsigned long long int>(floor(log10(2) * n));
}
 
int main()
{
    unsigned long long int n;
    std::cout << "Enter a degree" << std::endl;
    std::cin >> n;
    
    std::cout << "Result: " << value(n) << std::endl;
    
    system("Pause");
    return EXIT_SUCCESS;
}
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
02.07.2012, 14:05 13
Дарю идею: к-во цифр в степенях двойки с нуля и далее идут так: 1,1,1,1,2,2,2,3,3,3,4,4,4,4,5,5,5,6,6,6,
- т.е. повторяются группы (4 одинаковой длины и 2 по 3 одинаковой длины). Правильно рассчитав, можно верно вычислить к-во цифр у степени двойки практически в любой степени.

Ну, а с точностью до одного знака это совсем легко по формуле (int) n*log10(2)
1
320 / 270 / 128
Регистрация: 24.05.2012
Сообщений: 629
02.07.2012, 14:09 14
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main() {
    char i = 1;
    int n;
    scanf("%d", &n);
    while (n /= 10)
        i++;
    printf("%d", i);
}
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
02.07.2012, 14:16 15
Это что?
0
320 / 270 / 128
Регистрация: 24.05.2012
Сообщений: 629
02.07.2012, 14:17 16
Это был бред. После scanf нужно добавить строку:
C
1
n = 1 << n;
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
02.07.2012, 14:31 17
Вот. Проверяйте. Обошлись без логарифмов...

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
#include "iostream.h"
 
int SizePow2(int n)
{
    int S=1,k=0,m=4,i,c; 
 
    for (i=0; i <= n; i++)
    {
         k++;
                         
         if ((k % m) == 0) 
         {
                
             k = 0;
 
             if (i != n) S++;
             
             if (m == 4) 
             {
                m = 3;
                c = 0;
             } 
             else
             {
                c++;
                if (c == 2) m=4;
             }
         }
    }
         
    return S;
 
}
 
 
int main(int argc, char* argv[])
{
    int n;
     
    cin >> n;
 
    cout << SizePow2(n) << endl;
 
    return 0;
}
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
02.07.2012, 14:35 18
Цитата Сообщение от Catstail Посмотреть сообщение
Вот. Проверяйте. Обошлись без логарифмов...
Неправильно же.
Проверил для n == 100500, выдало 30151(а правильно - 30254).
1
1255 / 705 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
02.07.2012, 14:38 19
переписал из программы перевода чисел, мож пригодится. дает точный ответ, но пригодна лишь для n < 1000
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
#include <iostream>
#include <vector>
using namespace std;
 
int func(int n)
{
    vector<int> a(n+1);
    a.front() = 1;
    int q = 2, p = 10, res = 0, s = n+1;
 
    do
    {
        int j = 0;
        int demolition = 0; 
 
        for (int i = 0; i != s; ++i)
        {       
            demolition *= q;        
            demolition += a[i];
 
            if (demolition < p && i && j) 
            {
                a[j] = 0; 
                ++j;
            }
 
            if (demolition >= p) 
            {   
                a[j] = demolition / p;  
                demolition %= p;   
                ++j;
            }
        } 
 
        s = j;
        ++res;
    }
    while(s);
 
    return res; 
}
 
int main(void)
{
    size_t n;
    cin >> n;
    cout << func(n);
    return 0;
}
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
02.07.2012, 14:46 20
diagon-у. Беру тайм-аут, буду проверять...
0
02.07.2012, 14:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2012, 14:46
Помогаю со студенческими работами здесь

Определить, сколько в введенном пользователем числе четных цифр, а сколько нечетных
Определить, сколько в введенном пользователем числе четных цифр, а сколько нечетных

Сколько четных четырехзначных чисел можно составить из цифр 1, 2, 3, 4 без повторения цифр в числе
Сколько четных четырехзначных чисел можно составить из цифр 1, 2, 3, 4 без повторения цифр в числе?

Дано натуральное число n, определить сколько цифр в числе n, чему равна сумма его цифр
Дано натуральное число n, определить сколько цифр в числе n, чему равна сумма его цифр.

Дано натуральное число n. Определить: сколько цифр в числе n, чему равна сумма его цифр
Лаба Web-программирование Дано натуральное число n. Определить: сколько цифр в числе n, чему равна...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru