|
6 / 6 / 3
Регистрация: 14.11.2016
Сообщений: 53
|
||||||
Округление числа до n знаков после десятичной точки10.01.2017, 07:09. Показов 10728. Ответов 10
Решил задачу для новичков по C++. Задача совсем для зелёных новичков, кто только-только начал изучать C++, и у меня есть ощущение, что её можно решить лучше. Нет ли каких-то замечаний по поводу моего решения? Нельзя ли её решить лучше, правильнее? Сражу скажу, что to_string использовать нельзя. Лично мне с моего непрофессионального взгляда кажется, что моё решение слишком длинное для такой элементарной задачи.
Задача: Есть число: 2.7182818284590452353602875 Нужно округлить его до целых n. Пример: n=0, тогда ответ равен 3 n=25, ответ равен 2.7182818284590452353602875 n=13, ответ равен 2.7182818284590 Вот мой вариант: моё решение корректно, но, может быть, вы подскажите, как можно улучшить код.
0
|
||||||
| 10.01.2017, 07:09 | |
|
Ответы с готовыми решениями:
10
Округление знаков, после точки Округлить число до 25 знаков после десятичной точки Вычислить функцию с точностью 6 знаков после десятичной точки |
|
58 / 16 / 26
Регистрация: 07.02.2015
Сообщений: 346
|
|||||||||||||||||||||
| 10.01.2017, 16:11 | |||||||||||||||||||||
|
Укоротить строку иначе говоря
Пока вспомнил только для double 1)Подключить заголовочный файл
2)Затем использовать
Например
1
|
|||||||||||||||||||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||
| 10.01.2017, 16:19 | |||
|
Проблема в том, что при n = 25 у нас нет ни одного стандартного типа для хранения столь длинного числа с заданной точностью. Даже если рассматривать дробную часть как максимально возможное стандартное целое число (64 бита), получается 20-значное значение. Тут нужна длинная арифметика. И либо массивы, либо строки (например, std::string). Но если to_string нельзя, то скорее всего вариант с решением на строках не подходит. n точно никак не ограничен? Добавлено через 38 секунд
1
|
|||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|||||||
| 10.01.2017, 21:29 | |||||||
Сообщение было отмечено vjg2017 как решение
РешениеМое решение:
1
|
|||||||
|
6 / 6 / 3
Регистрация: 14.11.2016
Сообщений: 53
|
|
| 11.01.2017, 00:13 [ТС] | |
|
MrGluck,
"А stringstream буфер можно? То есть то же самое, но чуть подлиннее". Я не знаю, я выбрал один сайт с интересными задачами, чтобы подучить язык. Задачки интересные, есть те, где нужно подумать (но они не слишком сложные, то есть некий баланс). Попробовал сдать задание с to_string -- не прошло. Мой вариант прошёл тесты, но стало интересно, а нельзя ли сделать задачу лучше. Например, я задал такой же вопрос по Java -- получил новые знания Оценить качество кода -- решение учебное задачи для начинающих В следующий раз, когда буду сдавать задачи по Java -- буду использовать те вещи, которые узнал. "Но если to_string нельзя, то скорее всего вариант с решением на строках не подходит. n точно никак не ограничен?" Нет, n не ограничен. n может быть равен 25 максимум. Минимум -- 0. Mr.X "А вы не горячитесь в этом утверждении? Мое решение:" Чтобы ответить на ваш вопрос, мне нужно каким-то образом запустить вашу программу. Я для решение задач использую Dev-C++ 5.11. Я скопировал ваш код -- попробовал запустить. Получил ошибки: 1. main.cpp In function 'T_str round_with_precision(const T_str&, size_t)': 2. main.cpp [Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11 3. 13 33 main.cpp [Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11 4. 15 13 main.cpp [Error] 's_cur' does not name a type 5. 16 13 main.cpp [Error] 'point_pos' does not name a type Если бы я мог запустить вашу программу, я дал ответ на ваш вопрос, но моя программа успешно прошла 20 тестов. Её засчитала автоматическая система. Я здесь разместил сообщение, потому что, может быть, узнаю что-то новое, что могу использовать на новых задачах.
0
|
|
|
6 / 6 / 3
Регистрация: 14.11.2016
Сообщений: 53
|
||||||
| 11.01.2017, 20:15 [ТС] | ||||||
|
Правильно, так что и здесь я тоже что-то узнал для себя нового и полезного. Так что создал тему не просто так.
Добавлено через 19 часов 14 минут Кстати, мне удалось улучшить свой первоначальный вариант (напомню, что условие задача -- не сократить произвольное число с n знаками, а только частный вариант с n=25 и числом, равным, 2.7182818284590452353602875). Я сумел сократить код своей задачи по числу линий почти в два раза: было у меня -- 50 строк Стало -- 27 строк. То есть я нашёл более короткое решение задачи -- она прошла автоматическую проверку по 20 тестам:
0
|
||||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||||||
| 11.01.2017, 20:54 | |||||||||||
Решение на С (алсо работает для С++)
1
|
|||||||||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
| 12.01.2017, 00:21 | |
|
Croessmah, у ТС вполне конкретные условия. И я переписал его код выше, просто в более компактной форме.
0
|
|
| 12.01.2017, 00:21 | |
|
Помогаю со студенческими работами здесь
11
Выведите в выходной файл округленное до n знаков после десятичной точки число E
Функция round(), округление числа до 4-х знаков после запятой Округление числа в строке до указанного количества знаков после запятой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|