Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.98/49: Рейтинг темы: голосов - 49, средняя оценка - 4.98
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51

Выведите в выходной файл округленное до n знаков после десятичной точки число E

05.08.2013, 11:17. Показов 10500. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как пишутся очень короткие программы на C++ или C (менее 150 символов, не считая пробелов и табуляций)?
Например, задача
Выведите в выходной файл округленное до n знаков после десятичной точки число E. Число Е, округленное до 25 знаков после десятичной точки, равно 2.7182818284590452353602875.

Входные данные

Входной файл INPUT.TXT содержит целое число n (0 ≤ n ≤ 25).

Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу.
Вот мое решение на 255 символов:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <fstream>,<string>
 
int main()
{
    std::string e = "2.71828182845904523536028750";
    std::ifstream f ("input.txt");
    std::ofstream o("output.txt");
    int a,i;
    
    f >> a;
    if (a==0) 
            o << 3;
         else
        {
            if (e[a+2] > 52) e[a+1]++;
            for (i=0; i <= a+1 ;++i)
                o<<e[i];
        }   
    
    return 0;
}
Некоторым удается написать решения на 130, 156, 171 символов. Как это у них получается?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.08.2013, 11:17
Ответы с готовыми решениями:

Вывести в выходной файл округленное до n знаков после десятичной точки число E
Выведите в выходной файл округленное до n знаков после десятичной точки число E. Число Е, округленное до 25 знаков после десятичной точки,...

Округлить число до 25 знаков после десятичной точки
Есть простая задача: вот я ее решаю таким способом, т.к в задании написано округлить #include &lt;fstream&gt; #include...

Вывести в файл число с заданным количеством знаков после точки
Как это сделать, нигде не нашёл.(

53
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
05.08.2013, 15:38
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Фейлится на девятке.
В данном конкретном случае не фейлится, после единственной 9-ки идет 0.
0
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
05.08.2013, 15:42  [ТС]
Цитата Сообщение от Somebody Посмотреть сообщение
154, хотя, вроде бы знаю, как короче. Сейчас ещё попробую...
C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
 
main(int p)
{
    std::fstream i("input.txt"), o("output.txt", 2);
    i >> p;
    char s[] = "2.7182818284590452353602875", *q = s + p + !!p;
    *q += s[p + 2] > 52;
    q[1] = 0;
    o << s;
}
В тестирующей системе проходит на ура

Добавлено через 2 минуты
Somebody, объясните, пожайлуста, что значат

C++ (Qt)
1
2
char *q = s + p + !!p;
    *q += s[p + 2] > 52;
у вас в коде?
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
05.08.2013, 16:08
q - указатель на последнюю цифру (которую надо изменить). !p - логическое отрицание - ноль становится единицей, остальное нулём. Двойное отрицание - получается, всё, что не равно нулю, становится единицей. В общем
C++
1
char* q = &s[p + (p > 0)];
*q надо увеличить на единицу, если следующая цифра больше четвёрки. s[p + 2] - следующая цифра (q[1] нельзя, потому что при p = 0 попадёт на точку, а точка меньше четвёрки по коду). 52 - это '4'.
2
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 16:29  [ТС]
Помогите найти решение этой задачи за 132 или меньше символов:
Дом - Школа - Дом
(Время: 1 сек. Память: 16 Мб Сложность: 21%)
Мальчик Вася каждый день ездит на метро. Утром он едет в школу, а вечером того же дня, обратно из школы, домой. Для того, чтобы немного сэкономить, он покупает электронную смарт-карту на X поездок. Когда он хочет зайти в метро, он прикладывает карту к турникету. Если на карте осталось ненулевое количество поездок, то турникет пропускает Васю и списывает с карты одну поездку. Если же на карте не осталось поездок, то турникет не пропускает Васю, и он (Вася) вынужден купить на этой же станции новую карту на X поездок и вновь пройти через турникет.

Вася заметил, что в связи с тем, что утром метро переполнено, покупать новую карту утром накладно по времени, и он может опоздать в школу. В связи с этим он хочет понять: будет ли такой день, что с утра, поехав в школу, окажется, что у него на карточке ноль поездок.

Вася больше никуда на метро не ездит и поэтому заходит в метро только на станции около дома и на станции около школы.

Входные данные

Во входном файле INPUT.TXT содержится ровно 2 строки. В первой содержится слово «School» или «Home» в зависимости от того, где первый раз Вася купил карточку на X поездок. Во второй строке содержится натуральное число X, 1 ≤ X ≤ 1000.

Выходные данные

В выходной файл OUTPUT.TXT следует вывести «Yes», если будет такой день, что утром у Васи на карточке окажется ноль поездок и «No» в противном случае.
Используя все мои знания о C++, я нашел решение только на 137 символов:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
#include <fstream>
 
int main()
{
    int x;
    char s[2];
    std::fstream f("input.txt"), o ("output.txt",2);
    f>>s>>x;
    o<<(((*s!=72) && !(x%2))?"No":"Yes");       
}
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
06.08.2013, 16:49
Bohes_, как уже делалось в прошломпримере:
C++
1
main( int x )
char s[7]; -у тебя слишком маленький массив был.
o << *s!=72 && !(x%2)?"No":"Yes"; // Куча ненужных скобок.
1
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:00  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Bohes_, как уже делалось в прошломпримере:
C++
1
main( int x )
char s[7]; -у тебя слишком маленький массив был.
o << *s!=72 && !(x%2)?"No":"Yes"; // Куча ненужных скобок.
При main( int x ) в проверяющей системе пишется Time limit exceeded
Скобочки очень даже нужные :
task.cpp(9) : error C2679: binary '!=' : no operator found which takes a right-hand operand of type
'int' (or there is no acceptable conversion)
p.s. С размером массива у меня все в порядке

Добавлено через 6 минут
Вот таким образом:
C++ (Qt)
1
o << (*s!=72 && !(x%2)?"No":"Yes");
удалось добиться 135 символов
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
06.08.2013, 17:03
Цитата Сообщение от Bohes_ Посмотреть сообщение
*s!=72
Попробуй *s - 72
1
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:07  [ТС]
nonedark2008, спасибо, работает и 132 символа. Только не понятно, как можно записать решение на С++ за 114 символов
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
06.08.2013, 17:16
o << *s-72 && !(x%2)?"No":"Yes";
Без скобок тоже проходит
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
06.08.2013, 17:19
C++
1
2
3
4
5
6
7
8
9
10
#include <fstream>
 
main(int n)
{
    char s[9];
    std::fstream i("input.txt"), o("output.txt", 2);
    i >> s >> n;
 
    o << (!s[4] + n % 2 ? "Yes" : "No");
}
117
1
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:27  [ТС]
Цитата Сообщение от Schizorb Посмотреть сообщение
main(int n)
Как я писал выше, такое объявление переменной не подходит для тестирующей системы.
Цитата Сообщение от Schizorb Посмотреть сообщение
o << (!s[4] + n % 2 ? "Yes" : "No");
Очень элегантное решение
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
06.08.2013, 17:28
Цитата Сообщение от Schizorb Посмотреть сообщение
!s[4] + n % 2
Приоритет операций?
0
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:28  [ТС]
Цитата Сообщение от nonedark2008 Посмотреть сообщение
o << *s-72 && !(x%2)?"No":"Yes";
Без скобок тоже проходит
К сожалению, не проходит
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
06.08.2013, 17:29
nonedark2008, что с ним не так?
0
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:39  [ТС]
Цитата Сообщение от Schizorb Посмотреть сообщение
nonedark2008, что с ним не так?
Ваше решение работает:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
#include <fstream>
 
int main()
{
    int x;
    char s[9];
    std::fstream f("input.txt"), o ("output.txt",2);
    f>>s>>x;
    o<<(!s[4] + x % 2 ? "Yes" : "No");      
}
128 символов

Добавлено через 6 минут
Schizorb, !s[4] это проверка на что ?
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
06.08.2013, 17:42
Цитата Сообщение от Bohes_ Посмотреть сообщение
Schizorb, !s[4] это проверка на что ?
Проверка на нуль-символ. В слове "Home" у него будет индекс 4 (поэтому !s[4] вернет истину), а в слове "School" - там буковка (вернет ложь).
1
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:51  [ТС]
[QUOTE=Bohes_;4921653]Ваше решение работает:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
#include <fstream>
 
int main()
{
    int x;
    char s[9];
    std::fstream f("input.txt"), o ("output.txt",2);
    f>>s>>x;
    o<<(!s[4] + x % 2 ? "Yes" : "No");      
}
121 символ
0
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
06.08.2013, 20:21
Цитата Сообщение от Bohes_ Посмотреть сообщение
C++
1
o<<(!s[4] + x % 2 ? "Yes" : "No");
может так прокатит:
C++
1
o << (*s & ~x & 1 ? "No" : "Yes");
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
06.08.2013, 21:25
PWNED! Число E сделал 94 символа Код как-нибудь потом выложу, если никто сам не придумает, а пока несколько подсказок:
1) Пробелы и ещё кое-какие похожие на них символы не считаются, даже если они внутри строки в кавычках. Строку можно преобразовать циклом по определённому алгоритму.
2) Если код больше 16k символов, то вместо подсчёта символов используется размер файла. (Из-за много пришлось подумать.)
3) Можно использовать функцию system.
2
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
07.08.2013, 05:35  [ТС]
Цитата Сообщение от gray_fox Посмотреть сообщение
может так прокатит:
C++
1
o << (*s & ~x & 1 ? "No" : "Yes");
Time limit exceeded

Добавлено через 4 часа 20 минут
Цитата Сообщение от Somebody Посмотреть сообщение
PWNED! Число E сделал 94 символа Код как-нибудь потом выложу, если никто сам не придумает, а пока несколько подсказок:
1) Пробелы и ещё кое-какие похожие на них символы не считаются, даже если они внутри строки в кавычках. Строку можно преобразовать циклом по определённому алгоритму.
2) Если код больше 16k символов, то вместо подсчёта символов используется размер файла. (Из-за много пришлось подумать.)
3) Можно использовать функцию system.
1)Как не странно, но табуляции иногда считаются
2) А смысл писать файл в 16Кб? Все равно с 16к символами в рейтинг не пролезешь...
3)В system есть значение экспоненты?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.08.2013, 05:35

Округление числа до n знаков после десятичной точки
Решил задачу для новичков по C++. Задача совсем для зелёных новичков, кто только-только начал изучать C++, и у меня есть ощущение, что её...

Выведите первую цифру числа после десятичной точки
Дано положительное действительное число X. Выведите его первую цифру после десятичной точки. Пример Входные данные: 14.85 ...

Вычислить функцию с точностью 6 знаков после десятичной точки
)Вычислить функцию f(x,a)= при x=0.4, 0.6,..., 1.2 и a=2, 3, 4, 5 с точностью 6 знаков после десятичной точки.

Дано вещественное число, проверить является ли это число симметричным относительно положения точки до двух знаков после запятой.
Только начинаю программировать на с/с++ и столкнулась с логическими выражениями, простейшие задачи могу решить а в эту никак не могу...

Найдите такое число x, что x^2+√x=C , с точностью не менее 6 знаков после точки
Найдите такое число x, что x^2+√x=C , с точностью не менее 6 знаков после точки. Я думал, что это должно работать так, но получается...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу: https:/ / github. com/ altbodhi/ ReConMan По итогу пришел к мысли, что DU не дружат с существующими технологиями. От сериализации до отображения в реляционную. . .
Администрация Хабра удаляет новые энрегоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерировавны.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru