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

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

Войти
Регистрация
Восстановить пароль
 
 
Trane Pitrovich
1 / 1 / 0
Регистрация: 03.09.2013
Сообщений: 16
#1

как записать числа n и k в виде составного числа nk - C++

05.09.2013, 23:54. Просмотров 980. Ответов 26
Метки нет (Все метки)

как записать числа n и k в виде составного числа nk
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2013, 23:54
Я подобрал для вас темы с готовыми решениями и ответами на вопрос как записать числа n и k в виде составного числа nk (C++):

Как массив цифр записать в виде одного числа? - C++
Как массив цифр записать в виде одного числа? Например: есть массив а=2,a=4,a=5,a=9, а нужно записать просто одним числом 2459.

Ввести в программу строку (числа, латиница), считать только числа, записать числа в массив - C++
Нужна помощь! Срочно! Нужно ввести в программу строку (числа, латиница), считать только числа, записать числа в массив. Помогите,...

Записать в файл все числа от нуля до 2^16 в hex-виде - C++
Здравствуйте, как записать все комбинации 2^16 (в hex-виде) в блокнот ?

Найти все натуральные числа, не превосходящие числа n, которые можно представить в виде суммы слагаемых - C++
Заданы три натуральных числа a, b, n. Найти все натуральные числа, не превосходящие числа n, которые можно представить в виде суммы (...

Из одного файла считать целые числа, в другие файлы записать четные и нечетные числа - C++
Нужно с одного файла считать целые числа и в другие файлы записать четные и нечетные числа. Вот код, но почему-то не работает...и как...

Как написать программу-калькулятор чтобы было можно додавать 2 числа, 3 числа, 4 числа, n чисел? - C++
Как написать программу-калькулятор чтобы было можно додавать 2 числа, 3 числа, 4 числа, n чисел?

26
ValeryS
Модератор
6968 / 5305 / 522
Регистрация: 14.02.2011
Сообщений: 17,888
06.09.2013, 18:25 #16
Цитата Сообщение от Raali Посмотреть сообщение
за то нет медленного деления
"медленное" деление оптимизаторы уже давно превращают в "быстрое" умножение
но даже не это страшно, деление от 30 до 50 тактов процессора
а вот ветвление более страшно, из за кэширования процессора
процессор загоняет в кэш несколько команд, ну чтобы не за каждой командой в память бегать, и вот ветвление, которое он неправильно предсказал, он выгружает все команды и грузит новые, а это время

Добавлено через 1 минуту
хотя это мелочи на таком коде все быстро исполнится, не стоит заморачиватся, а вот возвращаемые данные поправь
1
dmitry94
562 / 192 / 36
Регистрация: 25.05.2012
Сообщений: 800
06.09.2013, 18:28 #17
Предлагаю свой вариант, работает 100%
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
int d(int in,int dg)
{
    int n = 1;
    for(int i=0; i<dg; i++) n *= in;
    return n;
}
 
int main() 
{
    int n=32, k=48;
    int i;
    for (i=0; i< 10; i++) if (d(10,i) > n) break;
    int result = d(10,i-(i-2))*n+k;
    std::cout << "result= " << result;
    return 0;
}
0
ValeryS
Модератор
6968 / 5305 / 522
Регистрация: 14.02.2011
Сообщений: 17,888
06.09.2013, 18:33 #18
Цитата Сообщение от dmitry94 Посмотреть сообщение
int d(int in,int dg)
я так понимаю это возведение 10 в степень?
0
Raali
639 / 343 / 42
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
06.09.2013, 18:38 #19
Цитата Сообщение от ValeryS Посмотреть сообщение
int d(int in,int dg)
это будет вызываться каждый раз в цикле, тогда уж лучше сделать по варианту ValeryS,

Цитата Сообщение от ValeryS Посмотреть сообщение
while(tmp)
{
*n*=10;
tmp/=10;
}
0
dmitry94
562 / 192 / 36
Регистрация: 25.05.2012
Сообщений: 800
06.09.2013, 18:45 #20
Цитата Сообщение от Raali Посмотреть сообщение
это будет вызываться каждый раз в цикле, тогда уж лучше сделать по варианту ValeryS,
Да, конечно. Я просто думал цель этой темы создать код позаморочнее . На самом деле, imho sprintf(%d,%d), atoi() самый быстрый вариант в данном случае
1
ValeryS
Модератор
6968 / 5305 / 522
Регистрация: 14.02.2011
Сообщений: 17,888
06.09.2013, 18:51 #21
Raali,
твой подход но без ветвлений
правда он немного неочевиден
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int digits(int x)  
{  
return 10*(x < 10)+   
 (x < 100 && x>=10)*100+   
 (x < 1000 && x>=100)*1000+   
 (x < 10000 && x>=1000)*10000+   
 (x < 100000 && x>=10000)*100000+
 (x < 1000000&& x>=100000)*1000000+ 
 (x < 10000000&& x>=1000000)*10000000+
 (x < 100000000&& x>=10000000)*100000000+
 (x < 1000000000&& x>=100000000)*1000000000+
 (x>=1000000000)*10000000000;
}

Не по теме:

нули проверь я не уверен что в них не запутался



Добавлено через 51 секунду
Цитата Сообщение от dmitry94 Посмотреть сообщение
atoi() самый быстрый вариант в данном случае
особенно atoi
2
Raali
06.09.2013, 18:53
  #22

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
правда он немного неочевиден
зато какой красивый xD
похож на лезвие канцелярского ножа)

0
dmitry94
562 / 192 / 36
Регистрация: 25.05.2012
Сообщений: 800
06.09.2013, 19:16 #23
Цитата Сообщение от ValeryS Посмотреть сообщение
особенно atoi
Да, извиняюсь, сам уже понял, что ерунду сказал.
0
ValeryS
Модератор
6968 / 5305 / 522
Регистрация: 14.02.2011
Сообщений: 17,888
06.09.2013, 19:16 #24
dmitry94,
у тебя здесь ошибка
Цитата Сообщение от dmitry94 Посмотреть сообщение
(d(10,i) > n)
сравнивать нужно с k а не с n
и
Цитата Сообщение от dmitry94 Посмотреть сообщение
i-(i-2)
ты не поверишь но всегда будет 2
раскроем скобки
i-(i-2)=i-i+2=2
1
dmitry94
562 / 192 / 36
Регистрация: 25.05.2012
Сообщений: 800
06.09.2013, 20:02 #25
Цитата Сообщение от ValeryS Посмотреть сообщение
dmitry94,
ты не поверишь
i-(i-2)=i-i+2=2
Я поверю

Добавлено через 7 минут
Код писался второпях, по этому была допущена данная ошибка. Результат от этого не меняется.
0
ValeryS
Модератор
6968 / 5305 / 522
Регистрация: 14.02.2011
Сообщений: 17,888
06.09.2013, 20:11 #26
Цитата Сообщение от dmitry94 Посмотреть сообщение
Результат от этого не меняется.
при данных цифрах да
но попробуй например 5 и 123, в разных сочетаниях, и приятно удивишся
1
dmitry94
562 / 192 / 36
Регистрация: 25.05.2012
Сообщений: 800
07.09.2013, 14:14 #27
Исправил
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
#include <iostream>
 
unsigned long long d(int in,int dg) //возведение числа in в степень dg
{
    unsigned long long  n = 1;
    for(int i=0; i<dg; i++) n *= in;
    return n;
}
 
int main() 
{
    int n=32, k=45;
    int dg_n = 0;
    int dg_k = 0;
    unsigned long long result=0;
 
    for (int i=1; i< 10; i++) 
        if (d(10,i) > n)
        {
            dg_n = i;
            break;          
        }
    for (int i=1; i< 10; i++) 
        if (d(10,i) > k)
        {
            dg_k = i;
            break;          
        }
 
        double f_n=(double)n/d(10,dg_n);
        result = f_n*d(10,dg_n+dg_k)+k;
 
        std::cout << "result= " << result;
 
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2013, 14:14
Привет! Вот еще темы с ответами:

Как записать числа в массив? - C++
Как вставить единицу и 0 в массив,а потом перевернуть числа справа - налево ? ( перевод в двоичную систему) int n; cin&gt;&gt;n; while...

Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми - C++
Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми. ...

Как записать логарифм числа X по основанию 4 - C++
как записать в c++ log числа X по основанию 4

разделить числа, и записать их как массив - C++
Добрый вечер! Подскажите пожалуйста, как можно, имея, например, файл с последовательностью чисел 2 7 4 3, разделить числа, и записать их...


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

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

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