Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
20 / 20 / 1
Регистрация: 24.07.2013
Сообщений: 121
1

Вычислить 2^n, но выводить по цифрам

31.10.2013, 23:30. Показов 1375. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
У меня есть код:
Lisp
1
2
3
4
5
6
7
8
9
(defun step (x n)
  (if (zerop n) 1
   (if (minusp n)
    (/ 1 (step x (- n)))
    (* x (step x (1- n))))))
    
(defun task (n)
  (if (or (< n 0) (> n 1000)) (princ "Peace of shit")
      (step 2 n)))
Но он не подходит, так как нужно не просто стандартным возведением в степень просчитать число, а высчитать первую цифру числа, потом выводить, потом вторую выводить и т.д. Вроде длинных вычислений.
Пример:
Нужно возвести 2 в 10 степень. Мы вводим 10. Вывод должен быть не сразу 1024, а 1 потом 0...2...4. Естественно глазу это не будет заметно, но та должен работать алгоритм. Что-то вроде работы с большими числами. В Лиспе это бессмысленная затея, так ка поддерживаются большие числа, но тем не менее меня интересует решение.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.10.2013, 23:30
Ответы с готовыми решениями:

Создавать и выводить случайные числа из промежутка [5, 10) и вычислить их среднее арифметическое
Здравствуйте, помогите пожалуйста сделать програму, буду очень благодарен! Язык програмирования C#...

Функция должна выводить несколько значений, но выводить только одно. Почему?
Здравствуйте! Мне нужно создать рекурсивную функцию, которая выводит на экран все простые...

Как строки из mysql выводить на разных страницах, либо выводить динамично
Мне нужно сделать тест: Вот, что мне удалось сделать: Вот моя таблица MySQL, называется...

Составить формулу по которой будет выводить уравнение. 2 Вычислить натуральное число n
№4.Составить формулу по которой будет выводить уравнение. №5.Вычислить натуральное число n

6
1050 / 944 / 107
Регистрация: 04.11.2012
Сообщений: 974
Записей в блоге: 3
01.11.2013, 10:50 2
Лучший ответ Сообщение было отмечено как решение

Решение

Ругаться то зачем?
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun -step (x n)
  (if (zerop n) 1
   (if (minusp n)
    (/ 1 (-step x (- n)))
  (progn (format t "~a " (expt x n))
    (* x (-step x (1- n)))))))
 
> (-step 2 10)
1024 512 256 128 64 32 16 8 4 2 
1024
 
> (-step 3 10)
59049 19683 6561 2187 729 243 81 27 9 3 
59049
3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,651
Записей в блоге: 13
01.11.2013, 12:06 3
Лучший ответ Сообщение было отмечено как решение

Решение

Lisp
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
(defun 2pow (n)
  (let ((r 1))
   (dotimes (i n 'ok)
     (printline (setq r (* r 2))))))
 
==> 2pow
 
(2pow 10)
2
4
8
16
32
64
128
256
512
1024
 
==> ok
 
(2pow 20)
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
 
==> ok
3
493 / 426 / 56
Регистрация: 29.04.2011
Сообщений: 443
01.11.2013, 13:36 4
Лучший ответ Сообщение было отмечено как решение

Решение

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun 2^ (n)
    (cond
        ((equal n 0) 1)
        (t (printsline (expt 2 n)) (2^ (- n 1)))))
 
(2^ 10)
1024
512
256
128
64
32
16
8
4
2
 
==> 1
Добавлено через 6 минут
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(defun 2^ (n &optional (i 1))
    (cond
        ((equal i (+ n 1)) "done")
        (t (printsline (expt 2 i)) (2^ n (+ i 1)))))
 
(2^ 10)
2
4
8
16
32
64
128
256
512
1024
 
==> "done"
Добавлено через 3 минуты
Цитата Сообщение от Mypowerfulbrain Посмотреть сообщение
(princ "Peace of shit")
если уж ругаться, то грамотно:
Lisp
1
(princ "Piece of shit")
3
20 / 20 / 1
Регистрация: 24.07.2013
Сообщений: 121
01.11.2013, 15:30  [ТС] 5
Спасибо, но это немного не то что мне нужно. Задача звучит так:
Задано натуральное число n (0 < n < 1000). Необходимо вычислить значение 2^n. Обратите внимание, что требуемое значение может выходить за пределы стандартных целых типов, в этом и состоит смысл задачи. Нужно вывести все цифры числа 2^n.
Тесты:
1) 3; ответ 8
2) 10; ответ 1024
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,651
Записей в блоге: 13
01.11.2013, 17:50 6
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Mypowerfulbrain Посмотреть сообщение
Обратите внимание, что требуемое значение может выходить за пределы стандартных целых типов, в этом и состоит смысл задачи.
- это если её решать в С, С++ и т.д.
А в Лиспе от веку разрядность целых неограниченна. Поэтому, применительно к Лиспу это задание тривиально. Надо 21000? Пожалуйста:

Lisp
1
2
3
(^ 2 1000)
 
==> 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
Добавлено через 1 час 25 минут
"Игра ума":

Lisp
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
;; вычисление степенией двойки в виде списка цифр
 
(defun *2 (lst &optional (p 0))
  (cond ((null lst) (if (zerop p) nil (list p)))
        (t (let ((n (+ p (* 2 (car lst)))))
             (if (< n 10) (cons n (*2 (cdr lst) 0))
                          (cons (% n 10) (*2 (cdr lst) (\ n 10))))))))                  
 
==> *2
 
;; Проверим:
 
(let ((a '(1)))
  (dotimes (i 60 'ok)
   (printline (reverse (setq a (*2 a))))))
(2)
(4)
(8)
(1 6)
(3 2)
(6 4)
(1 2 8)
(2 5 6)
(5 1 2)
(1 0 2 4)
(2 0 4 8)
(4 0 9 6)
(8 1 9 2)
(1 6 3 8 4)
(3 2 7 6 8)
(6 5 5 3 6)
(1 3 1 0 7 2)
(2 6 2 1 4 4)
(5 2 4 2 8 8)
(1 0 4 8 5 7 6)
(2 0 9 7 1 5 2)
(4 1 9 4 3 0 4)
(8 3 8 8 6 0 8)
(1 6 7 7 7 2 1 6)
(3 3 5 5 4 4 3 2)
(6 7 1 0 8 8 6 4)
(1 3 4 2 1 7 7 2 8)
(2 6 8 4 3 5 4 5 6)
(5 3 6 8 7 0 9 1 2)
(1 0 7 3 7 4 1 8 2 4)
(2 1 4 7 4 8 3 6 4 8)
(4 2 9 4 9 6 7 2 9 6)
(8 5 8 9 9 3 4 5 9 2)
(1 7 1 7 9 8 6 9 1 8 4)
(3 4 3 5 9 7 3 8 3 6 8)
(6 8 7 1 9 4 7 6 7 3 6)
(1 3 7 4 3 8 9 5 3 4 7 2)
(2 7 4 8 7 7 9 0 6 9 4 4)
(5 4 9 7 5 5 8 1 3 8 8 8)
(1 0 9 9 5 1 1 6 2 7 7 7 6)
(2 1 9 9 0 2 3 2 5 5 5 5 2)
(4 3 9 8 0 4 6 5 1 1 1 0 4)
(8 7 9 6 0 9 3 0 2 2 2 0 8)
(1 7 5 9 2 1 8 6 0 4 4 4 1 6)
(3 5 1 8 4 3 7 2 0 8 8 8 3 2)
(7 0 3 6 8 7 4 4 1 7 7 6 6 4)
(1 4 0 7 3 7 4 8 8 3 5 5 3 2 8)
(2 8 1 4 7 4 9 7 6 7 1 0 6 5 6)
(5 6 2 9 4 9 9 5 3 4 2 1 3 1 2)
(1 1 2 5 8 9 9 9 0 6 8 4 2 6 2 4)
(2 2 5 1 7 9 9 8 1 3 6 8 5 2 4 8)
(4 5 0 3 5 9 9 6 2 7 3 7 0 4 9 6)
(9 0 0 7 1 9 9 2 5 4 7 4 0 9 9 2)
(1 8 0 1 4 3 9 8 5 0 9 4 8 1 9 8 4)
(3 6 0 2 8 7 9 7 0 1 8 9 6 3 9 6 8)
(7 2 0 5 7 5 9 4 0 3 7 9 2 7 9 3 6)
(1 4 4 1 1 5 1 8 8 0 7 5 8 5 5 8 7 2)
(2 8 8 2 3 0 3 7 6 1 5 1 7 1 1 7 4 4)
(5 7 6 4 6 0 7 5 2 3 0 3 4 2 3 4 8 8)
(1 1 5 2 9 2 1 5 0 4 6 0 6 8 4 6 9 7 6)
 
==> ok
Оно?
3
20 / 20 / 1
Регистрация: 24.07.2013
Сообщений: 121
03.11.2013, 17:21  [ТС] 7
Спасибо. Будьте здоровы!
0
03.11.2013, 17:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2013, 17:21
Помогаю со студенческими работами здесь

Выводить на дисплей каждый введённый с клавиатуры символ, причём цифру выводить «в трёх экземплярах»
Добрый день , возник вопрос с прерываниями.Задание выводить на дисплей каждый введённый с...

Вопрос по цифрам
Задумался. По запросу, допустим, &quot;1&quot; - ОРТ - стоит первым, потом луноход 1 - магазин дизайнерских...

Анализ числа по цифрам
В переменной целочисленного типа имеется число. Например число 1503. Как разбить это число по...

Разложение числа по цифрам
Здравствуйте, вообщем возникла такая проблема вроде бы и написал уже программу разложения числа по...


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

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