Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
GaldeMarine
7 / 5 / 6
Регистрация: 15.07.2015
Сообщений: 38
1

Вывести 5 последних знаков до десятичной запятой и 5 первых знаков числа

01.01.2016, 23:05. Просмотров 3972. Ответов 20
Метки нет (Все метки)

Собсна сабж:
5 последних знаков до десятичной запятой и 5 первых знаков после десятичной запятой для числа (1+sqrt(3) )^n

n [0 - 100000]

На вводе n;

Примеры:


Ввод: 5

Вывод: 00152.21023

Вводя: 7

Вывод: 01136.11266
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.01.2016, 23:05
Ответы с готовыми решениями:

Округлить до 2х знаков после запятой, через round
Надо округлить до 2х знаков после запятой, через pound Помогите с кодом import math def f(u,...

Visual Basic 2013 сложение чисел, округление до 2 знаков после запятой, отбрасывание знаков
Как сложить несколько чисел из TextBox, округлить их, отбросить знаки после запятой? показать...

Вывести n знаков после запятой
Всем привет, не знаю как через cout вывести 8 знаков после запятой. Заранее спасибо

Округление числа до 2 знаков после запятой
Буду очень признательна, если кто-то подскажет, как написать программу, округляющую число до двух...

увеличение числа знаков после запятой
я объявляю два числа a и b как float: float a; float b; потом ввожу b и совершаю следующую...

20
Jabbson
Эксперт по компьютерным сетям
3481 / 2519 / 779
Регистрация: 03.11.2009
Сообщений: 7,952
Записей в блоге: 3
01.01.2016, 23:57 2
"в лоб"
Python
1
2
3
4
import math
n = int(input('n='))
res = str((1+math.sqrt(3))**n).split('.')
print(res[0].zfill(5)+'.'+'{:.5}'.format(res[1]))
скорее всего можно через форматирование
0
GaldeMarine
7 / 5 / 6
Регистрация: 15.07.2015
Сообщений: 38
02.01.2016, 00:11  [ТС] 3
Цитата Сообщение от Jabbson Посмотреть сообщение
"в лоб" PythonВыделить код1
2
3
4
import math
n = int(input('n='))
res = str((1+math.sqrt(3))**n).split('.')
print(res[0].zfill(5)+'.'+'{:.5}'.format(res[1]))скорее всего можно через форматирование
Я тоже так сделал. Но при n=100000 не работает.
0
Marinero
Модератор
Эксперт NIX
2496 / 1879 / 631
Регистрация: 02.03.2015
Сообщений: 6,102
02.01.2016, 01:00 4
Цитата Сообщение от GaldeMarine Посмотреть сообщение
при n=100000 не работает
Посчитайте это число отдельно.
0
02.01.2016, 01:00
GaldeMarine
7 / 5 / 6
Регистрация: 15.07.2015
Сообщений: 38
02.01.2016, 18:07  [ТС] 5
Цитата Сообщение от Marinero Посмотреть сообщение
при n=100000 не работает Посчитайте это число отдельно.
Очень полезный совет... Только проблема в том, что оно не работает не только при 100К.
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10692 / 6395 / 1592
Регистрация: 25.07.2009
Сообщений: 12,137
02.01.2016, 20:56 6
Python
1
2
3
>>> import math
>>> print("%011.5f" % ((1 + math.sqrt(3)) ** 5))
00152.21024
0
Marinero
Модератор
Эксперт NIX
2496 / 1879 / 631
Регистрация: 02.03.2015
Сообщений: 6,102
02.01.2016, 23:49 7
Цитата Сообщение от GaldeMarine Посмотреть сообщение
Только проблема в том, что оно не работает не только при 100К
Cуществуют реальные ограничения по величине обрабатываемого числа: например 32битное число (т.е. могущее быть представлено 32 разрядами) => 2**32 - 1
А у Вас n ещё меньше будет чем 32 — 2,732051**n
Поэтому для получения результата при n > 30 следует обрезать получаемое число спереди, оставляя только 5 значащих цифр перед запятой при каждой иттерации (ну или почти при каждой).
0
Jabbson
Эксперт по компьютерным сетям
3481 / 2519 / 779
Регистрация: 03.11.2009
Сообщений: 7,952
Записей в блоге: 3
03.01.2016, 00:26 8
Python
1
2
3
4
5
6
7
8
9
10
import math
from decimal import Decimal
 
n = int(input('n = '))
res = str(Decimal(1+math.sqrt(3))**n).split('.')
 
res[0] = res[0].zfill(5) if len(res[0]) <= 5 else res[0][-5:]
res[1] = res[1]+'0'*(5-len(res[1])) if len(res[1]) < 5 else res[1][:5]
 
print('.'.join(res))
Добавлено через 1 минуту
Цитата Сообщение от easybudda Посмотреть сообщение
%011.5f"
округление будет
1
GaldeMarine
7 / 5 / 6
Регистрация: 15.07.2015
Сообщений: 38
08.01.2016, 00:21  [ТС] 9
Спасибо, Jabbson

Добавлено через 14 минут
Меня только смущает то, что две твои задачи выдают разные результаты при н=60+
И последняя не работает при некоторых значениях (например 0,62)
0
Jabbson
Эксперт по компьютерным сетям
3481 / 2519 / 779
Регистрация: 03.11.2009
Сообщений: 7,952
Записей в блоге: 3
08.01.2016, 00:36 10
Цитата Сообщение от GaldeMarine Посмотреть сообщение
И последняя не работает при некоторых значениях (например 0,62)
полагал, что степень может быть только целая, если это не так:
Python
1
2
3
4
5
6
7
8
9
10
import math
from decimal import Decimal
 
n = Decimal(input('n = '))
res = str(Decimal(1+math.sqrt(3))**n).split('.')
 
res[0] = res[0].zfill(5) if len(res[0]) <= 5 else res[0][-5:]
res[1] = res[1]+'0'*(5-len(res[1])) if len(res[1]) < 5 else res[1][:5]
 
print('.'.join(res))
0
GaldeMarine
7 / 5 / 6
Регистрация: 15.07.2015
Сообщений: 38
08.01.2016, 00:53  [ТС] 11
Степень может быть только целой. Это примеры. 0 и 62
0
Jabbson
Эксперт по компьютерным сетям
3481 / 2519 / 779
Регистрация: 03.11.2009
Сообщений: 7,952
Записей в блоге: 3
08.01.2016, 01:45 12
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from math import sqrt
from decimal import *
 
getcontext().prec = 100000
 
n = Decimal(input('n = '))
 
num = Decimal(1+sqrt(3))**n
res = str(num.quantize(Decimal('.000001'))).split('.')
res[0] = res[0].zfill(5) if len(res[0]) <= 5 else res[0][-5:]
res[1] = res[1]+'0'*(5-len(res[1])) if len(res[1]) < 5 else res[1][:5]
 
print('.'.join(res))
0
andreyko5757
0 / 0 / 0
Регистрация: 19.01.2016
Сообщений: 7
19.01.2016, 13:11 13
5 последних знаков до десятичной запятой и 5 первых знаков после десятичной запятой для числа (1+sqrt(3) )^n
n [0 - 100000]
На вводе n;
Примеры:
Ввод: 5
Вывод: 00152.21023
Вводя: 7
Вывод: 01136.11266

Вот что у меня получилось.. но при проверке в интернете - выдает ошибку. Помогите, я новичок в Python
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from math import *
from decimal import *
 
getcontext().prec = 100000 
 
n = Decimal(input())
 
num = Decimal(str(1+sqrt(3)))**n
res = str(num.quantize(Decimal('.000001'))).split('.')
res[0] = res[0].zfill(5) if len(res[0]) <= 5 else res[0][-5:]
res[1] = res[1]+'0'*(5-len(res[1])) if len(res[1]) < 5 else res[1][:5]
 
print(res[0]+'.'+res[1])
0
Jabbson
Эксперт по компьютерным сетям
3481 / 2519 / 779
Регистрация: 03.11.2009
Сообщений: 7,952
Записей в блоге: 3
19.01.2016, 14:01 14
Цитата Сообщение от andreyko5757 Посмотреть сообщение
Вот что у меня получилось..
Это не у Вас получилось, а у меня,... ну да ладно.

Смотрим результат вычислений
Код
>>> (1+sqrt(3))**5
152.21023553303058
>>> (1+sqrt(3))**7
1136.1126648825914
сравниваем с результатами выполнения программы
Код
5
00152.21023
7
01136.11266
что не так?
0
dondublon
3595 / 1520 / 286
Регистрация: 17.03.2012
Сообщений: 8,358
Записей в блоге: 5
19.01.2016, 14:05 15
'{:0>11.5f}'.format(6.43)
0
Jabbson
Эксперт по компьютерным сетям
3481 / 2519 / 779
Регистрация: 03.11.2009
Сообщений: 7,952
Записей в блоге: 3
19.01.2016, 14:10 16
Python
1
'{:0>11.5f}'.format((1+sqrt(3))**32)
Код
'92819813433343.89062'
как-то не очень, нет?
0
andreyko5757
0 / 0 / 0
Регистрация: 19.01.2016
Сообщений: 7
19.01.2016, 15:07 17
можете подсказать в чем может быть ошибка?
Я в нете на тестовалку отправляю но мне 0 балов дают.. хочу разобраться в чем ошибка
0
Jabbson
Эксперт по компьютерным сетям
3481 / 2519 / 779
Регистрация: 03.11.2009
Сообщений: 7,952
Записей в блоге: 3
19.01.2016, 15:07 18
покажите в интернете вашу "тестовалку"
0
Marinero
Модератор
Эксперт NIX
2496 / 1879 / 631
Регистрация: 02.03.2015
Сообщений: 6,102
19.01.2016, 17:07 19
Если не строковыми методами
Python
1
2
3
4
5
6
7
8
9
10
from math import sqrt
 
n = int(input())
res = 1
k = 1 + sqrt(3)
 
for _ in range(n):
    res *= k
    res = res * 1e10 % 1e15 / 1e10
print('{:011.5f}'.format(res))
0
Jabbson
Эксперт по компьютерным сетям
3481 / 2519 / 779
Регистрация: 03.11.2009
Сообщений: 7,952
Записей в блоге: 3
19.01.2016, 17:24 20
(1+sqrt(3))^5 = 152.2102355330306009152076390262583841454834311676567476344555...

для 5 у меня ответ 00152.21023, а у тебя 00152.21024.

Добавлено через 6 минут
При значениях больше 12 ответы вообще неправильные.

Добавлено через 1 минуту
к примеру
(1+sqrt(3))^13 = 472448.0173394737608004472418399368968931275517356749515767631...

у меня
72448.01733

у тебя
99242.93657
0
19.01.2016, 17:24
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2016, 17:24

Округление числа до 4 знаков после запятой
При табуляции как сделать при Y, чтобы после запятой было 4 знака?

Насчёт числа знаков после запятой
Вот например у меня массив с числами, у которых по 5 знаков после запятой. Как мне (с помощью какой...

Увеличение числа знаков после запятой
Всем привет! не выходит увеличить число знаков после запятой, конкретно для значений S_A и S_t,...


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

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

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