Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 4.77
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
05.08.2013, 11:17     Выведите в выходной файл округленное до n знаков после десятичной точки число E #1
Как пишутся очень короткие программы на 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 символов. Как это у них получается?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2013, 11:17     Выведите в выходной файл округленное до n знаков после десятичной точки число E
Посмотрите здесь:

C++ Вычислить функцию с точностью 6 знаков после десятичной точки
C++ Дано вещественное число, проверить является ли это число симметричным относительно положения точки до двух знаков после запятой.
Вывод n знаков после точки средствами c++ C++
C++ Округлить число до 25 знаков после десятичной точки
C++ Вывести в файл число с заданным количеством знаков после точки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
05.08.2013, 15:38     Выведите в выходной файл округленное до n знаков после десятичной точки число E #21
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Фейлится на девятке.
В данном конкретном случае не фейлится, после единственной 9-ки идет 0.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
05.08.2013, 15:42  [ТС]     Выведите в выходной файл округленное до n знаков после десятичной точки число E #22
Цитата Сообщение от 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;
у вас в коде?
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
05.08.2013, 16:08     Выведите в выходной файл округленное до n знаков после десятичной точки число E #23
q - указатель на последнюю цифру (которую надо изменить). !p - логическое отрицание - ноль становится единицей, остальное нулём. Двойное отрицание - получается, всё, что не равно нулю, становится единицей. В общем
C++
1
char* q = &s[p + (p > 0)];
*q надо увеличить на единицу, если следующая цифра больше четвёрки. s[p + 2] - следующая цифра (q[1] нельзя, потому что при p = 0 попадёт на точку, а точка меньше четвёрки по коду). 52 - это '4'.
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 16:29  [ТС]     Выведите в выходной файл округленное до n знаков после десятичной точки число E #24
Помогите найти решение этой задачи за 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");       
}
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
06.08.2013, 16:49     Выведите в выходной файл округленное до n знаков после десятичной точки число E #25
Bohes_, как уже делалось в прошломпримере:
C++
1
main( int x )
char s[7]; -у тебя слишком маленький массив был.
o << *s!=72 && !(x%2)?"No":"Yes"; // Куча ненужных скобок.
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:00  [ТС]     Выведите в выходной файл округленное до n знаков после десятичной точки число E #26
Цитата Сообщение от 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 символов
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
06.08.2013, 17:03     Выведите в выходной файл округленное до n знаков после десятичной точки число E #27
Цитата Сообщение от Bohes_ Посмотреть сообщение
*s!=72
Попробуй *s - 72
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:07  [ТС]     Выведите в выходной файл округленное до n знаков после десятичной точки число E #28
nonedark2008, спасибо, работает и 132 символа. Только не понятно, как можно записать решение на С++ за 114 символов
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
06.08.2013, 17:16     Выведите в выходной файл округленное до n знаков после десятичной точки число E #29
o << *s-72 && !(x%2)?"No":"Yes";
Без скобок тоже проходит
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.08.2013, 17:19     Выведите в выходной файл округленное до n знаков после десятичной точки число E #30
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
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:27  [ТС]     Выведите в выходной файл округленное до n знаков после десятичной точки число E #31
Цитата Сообщение от Schizorb Посмотреть сообщение
main(int n)
Как я писал выше, такое объявление переменной не подходит для тестирующей системы.
Цитата Сообщение от Schizorb Посмотреть сообщение
o << (!s[4] + n % 2 ? "Yes" : "No");
Очень элегантное решение
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
06.08.2013, 17:28     Выведите в выходной файл округленное до n знаков после десятичной точки число E #32
Цитата Сообщение от Schizorb Посмотреть сообщение
!s[4] + n % 2
Приоритет операций?
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:28  [ТС]     Выведите в выходной файл округленное до n знаков после десятичной точки число E #33
Цитата Сообщение от nonedark2008 Посмотреть сообщение
o << *s-72 && !(x%2)?"No":"Yes";
Без скобок тоже проходит
К сожалению, не проходит
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.08.2013, 17:29     Выведите в выходной файл округленное до n знаков после десятичной точки число E #34
nonedark2008, что с ним не так?
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:39  [ТС]     Выведите в выходной файл округленное до n знаков после десятичной точки число E #35
Цитата Сообщение от 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] это проверка на что ?
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.08.2013, 17:42     Выведите в выходной файл округленное до n знаков после десятичной точки число E #36
Цитата Сообщение от Bohes_ Посмотреть сообщение
Schizorb, !s[4] это проверка на что ?
Проверка на нуль-символ. В слове "Home" у него будет индекс 4 (поэтому !s[4] вернет истину), а в слове "School" - там буковка (вернет ложь).
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
06.08.2013, 17:51  [ТС]     Выведите в выходной файл округленное до n знаков после десятичной точки число E #37
[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 символ
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
06.08.2013, 20:21     Выведите в выходной файл округленное до n знаков после десятичной точки число E #38
Цитата Сообщение от Bohes_ Посмотреть сообщение
C++
1
o<<(!s[4] + x % 2 ? "Yes" : "No");
может так прокатит:
C++
1
o << (*s & ~x & 1 ? "No" : "Yes");
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
06.08.2013, 21:25     Выведите в выходной файл округленное до n знаков после десятичной точки число E #39
PWNED! Число E сделал 94 символа Код как-нибудь потом выложу, если никто сам не придумает, а пока несколько подсказок:
1) Пробелы и ещё кое-какие похожие на них символы не считаются, даже если они внутри строки в кавычках. Строку можно преобразовать циклом по определённому алгоритму.
2) Если код больше 16k символов, то вместо подсчёта символов используется размер файла. (Из-за много пришлось подумать.)
3) Можно использовать функцию system.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2013, 05:35     Выведите в выходной файл округленное до n знаков после десятичной точки число E
Еще ссылки по теме:

Задача на струтуру. В выходной файл выведите время, оставшееся от t1 до t2 в формате hh:mm:ss C++
C++ Округление знаков, после точки
Вывести в выходной файл округленное до n знаков после десятичной точки число E C++

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

Или воспользуйтесь поиском по форуму:
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
07.08.2013, 05:35  [ТС]     Выведите в выходной файл округленное до n знаков после десятичной точки число E #40
Цитата Сообщение от 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 есть значение экспоненты?
Yandex
Объявления
07.08.2013, 05:35     Выведите в выходной файл округленное до n знаков после десятичной точки число E
Ответ Создать тему
Опции темы

Текущее время: 15:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru