Форум программистов, компьютерный форум 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++ Вывести в файл число с заданным количеством знаков после точки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.08.2013, 10:46     Выведите в выходной файл округленное до n знаков после десятичной точки число E #41
Цитата Сообщение от Bohes_ Посмотреть сообщение
Time limit exceeded
acmp вчера сильно глючил, там один проверяющий сервер (медленный) стабильно выдавал WA\TLE\RE\ETC.
Решалось одновременной посылкой 3-4 исходников.

Цитата Сообщение от Somebody Посмотреть сообщение
Можно использовать функцию system.
О, видимо вайтспейсы все-таки разбанили... Ну или их вообще не банили >_<
У меня на 130 символов тоже вайтспейсы, но только там все делается в лоб (без system).
А, если не секрет, какой язык использовался в system?

P.S. в дом-школа-дом обновил рекорд до 113 символов. А именно, сократил эту строку
C++
1
o << (*s & ~x & 1 ? "No" : "Yes");
на 1 символ + 1 сэкономил один символ на студийной особенности.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
07.08.2013, 10:53     Выведите в выходной файл округленное до n знаков после десятичной точки число E #42
Цитата Сообщение от Bohes_ Посмотреть сообщение
1)Как не странно, но табуляции иногда считаются
Да, я заметил. Но если хорошо подумать, то есть ещё другой символ, который не считается.
Цитата Сообщение от Bohes_ Посмотреть сообщение
2) А смысл писать файл в 16Кб? Все равно с 16к символами в рейтинг не пролезешь...
Я думал, это уже понятно: в решении несколько тысяч пробелов. Но если будет больше 16k, то они все посчитаются в размере.
Цитата Сообщение от Bohes_ Посмотреть сообщение
3)В system есть значение экспоненты?
В смысле можно ли какой-то командой получить экспоненту? Наверное, нет.

Добавлено через 2 минуты
Цитата Сообщение от diagon Посмотреть сообщение
О, видимо вайтспейсы все-таки разбанили... Ну или их вообще не банили >_<
Не, даже табуляция в строке считается. Но всё-таки там не учли одну возможность, которую можно эксплойтить.
Цитата Сообщение от diagon Посмотреть сообщение
А, если не секрет, какой язык использовался в system?
Пишется и выполняется bat файл. (Без промежуточного bat'а не получилось.)
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
07.08.2013, 11:21     Выведите в выходной файл округленное до n знаков после десятичной точки число E #43
Цитата Сообщение от Somebody Посмотреть сообщение
Не, даже табуляция в строке считается.
Все-таки считается? Вроде ж нет...
При подсчете размера кода не учитываются пробелы, а так же символы переноса и табуляции.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
07.08.2013, 11:27     Выведите в выходной файл округленное до n знаков после десятичной точки число E #44
Внутри закавыченной строки точно считается, в остальных местах - не проверял.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
07.08.2013, 11:44     Выведите в выходной файл округленное до n знаков после десятичной точки число E #45
Somebody, внутри закавыченной строки не считаются же пробелы.
Bohes_
4 / 4 / 0
Регистрация: 18.06.2013
Сообщений: 51
07.08.2013, 13:24  [ТС]     Выведите в выходной файл округленное до n знаков после десятичной точки число E #46
Вот пример исходника, где табуляция считается:
Вложения
Тип файла: zip t68m.zip (249 байт, 22 просмотров)
ching0n
 Аватар для ching0n
3 / 3 / 1
Регистрация: 06.08.2013
Сообщений: 23
09.08.2013, 01:13     Выведите в выходной файл округленное до n знаков после десятичной точки число E #47
Ребята, читал книгу Лафоре, главу про функции. Он там пишет, что можно при объявлении функции не указывать тип возвращаемого значения и тогда по умолчанию тип будет int!
Т.е. вместо
C++
1
2
3
4
int main()
{
    ...
}
Можно спокойно писать:
C++
1
2
3
4
main()
{
    ...
}
Быть может, кто-то уже писал в этой теме об этом. В таком случае, приношу свои извинения.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
09.08.2013, 09:30     Выведите в выходной файл округленное до n знаков после десятичной точки число E #48
Цитата Сообщение от ching0n Посмотреть сообщение
Можно спокойно писать
Где-то можно, а где-то нельзя. Все зависит от компилятора. Например VS2012 не позволяет упускать тип возвращаемого значения.
И так как ТС постоянно изменял конечный код, добавляя тип, то и компилятор на проверяющем серве тоже не позволяет.
murderer
3175 / 1398 / 69
Регистрация: 06.10.2010
Сообщений: 3,017
20.08.2013, 17:00     Выведите в выходной файл округленное до n знаков после десятичной точки число E #49
Если бы табуляция не считалась, то можно было бы упаковать что угодно (практически неограниченное количество информации) в сотню символов. То есть берём любой исполняемый файл, перекодируем его заменяя все биты равные 0 пробелом, а биты равные 1 - табуляцией. Останется только написать распаковщик.

Добавлено через 1 минуту
Видимо кто-то очень умный просёк это и админ оперативно закрыл брешь.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
20.08.2013, 17:08     Выведите в выходной файл округленное до n знаков после десятичной точки число E #50
Ладно, подсказываю дальше. Возврат каретки всё ещё не считается в количестве символов, но при этом их компилятор нормально его переваривает внутри строки. И это вряд ли пофиксят, потому что тут надо парсить исходник с учётом всех правил написания строк и комментариев в конкретном языке.
Цитата Сообщение от murderer Посмотреть сообщение
То есть берём любой исполняемый файл, перекодируем его заменяя все биты равные 0 пробелом, а биты равные 1 - табуляцией. Останется только написать распаковщик.
Так я и сделал, но вот облом: эта версия компилятора не переваривает строковые литералы больше примерно 2048 символов, так что кроме кода распаковки пришлось максимально уменьшать и кодируемый файл.
murderer
3175 / 1398 / 69
Регистрация: 06.10.2010
Сообщений: 3,017
20.08.2013, 17:20     Выведите в выходной файл округленное до n знаков после десятичной точки число E #51
Возврат каретки всё ещё не считается в количестве символов, но при этом их компилятор нормально его переваривает внутри строки.
Я на Delphi пишу - он не переваривает

не переваривает строковые литерал больше примерно 2048 символов
на Delphi ограничение 255, но можно невозбранно делать так
Код
a='                                 '+
  '                                 '+
  ...
  '                                 ';
Хотя при этом появляется куча лишних кавычек

Добавлено через 6 минут
Я ещё так пытался делать: пишу всё решение асм-вставкой, затем компилирую и вставляю так
Assembler
1
db 'код в виде многа букав'
У меня такое компилируется и работает, а у них гарантирован TLE. Приходится вставлять 16-ричными кодами, что как минимум в 2 раза больше.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.08.2013, 17:21     Выведите в выходной файл округленное до n знаков после десятичной точки число E #52
Цитата Сообщение от Somebody Посмотреть сообщение
переваривает строковые литералы больше примерно 2048 символов
за 2 символа можно увеличить этот предел вдвое
C++
1
"тут 2048 символов...""и тут тоже 2048..."
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
20.08.2013, 17:45     Выведите в выходной файл округленное до n знаков после десятичной точки число E #53
Цитата Сообщение от murderer Посмотреть сообщение
Я ещё так пытался делать: пишу всё решение асм-вставкой, затем компилирую и вставляю так
Код базонезависимый был? Я как-то давно пытался сделать примерно так. Насколько помню, в простом случае работало, но поиск функций в kernel32 не прокатил (у себя на компе работало нормально). Но вообще, мне кажется, если аккуратно всё сделать, то может получиться. В конце концов, можно вытащить адрес функций в их системе и статически забить в код.
Цитата Сообщение от diagon Посмотреть сообщение
за 2 символа можно увеличить этот предел вдвое
Это я понял, но так размер быстро растёт. Мой метод кодировки использует намного больше 8 байт на один кодируемый, зато декодер меньше.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2013, 18:39     Выведите в выходной файл округленное до n знаков после десятичной точки число E
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
murderer
3175 / 1398 / 69
Регистрация: 06.10.2010
Сообщений: 3,017
20.08.2013, 18:39     Выведите в выходной файл округленное до n знаков после десятичной точки число E #54
Код базонезависимый был?
Как раз таки нет - наоборот заточенный под конкретный компилятор. Например код к задаче "Разные цифры" выглядит примерно так
Delphi
1
2
3
4
5
6
repeat
  asm
  dq <опкоды>
  end;
  write(x:3)
until x=36
Внутри асм-вставки расположен условный переход, поэтому write вызывается только при определённом условии. Кроме того компилятор заменяет переменную x регистром и это очень облегчает задачу.

P.S. этот код сейчас на первом месте в топе

Добавлено через 12 минут
Ещё пытался находить в адресном пространстве пустоты и использовать их как буффер для результирующей строки, но кажется это не очень помогло.

Добавлено через 5 минут
А вот - нашёл
Кликните здесь для просмотра всего текста
Delphi
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
var
  s: Pchar;
  a: word;
begin
  reset(input,'INPUT.TXT');
  read(a);
  asm
  std
  inc edx
  mov ebx,eax
  mov ah,2
  @1:mov ecx,edx
     mov esi,406000h
     mov edi,esi
     @2:lodsb
        add al,al
        add al,ah
        aam
        stosb
     loop @2
     xadd  [edi],ah
     setnz al
     add   edx,eax
     dec   ebx
  jnz @1
  mov ebx,406001h
  @3:dec ebx
     add byte[ebx],30h
     dec edx
  jnz @3
  end;
  rewrite(output,'OUTPUT.TXT');
  write(s)
end.

И финальный вариант
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
var
  s: Pchar;
  a: word;
begin
  reset(input,'INPUT.TXT');
  read(a);
  asm
  dq$D18902B4C38942FD,$ACF78900406000BE,$E2AA0AD4E000C000,$01C0950F27C00FF6,$406001BBE2754BC2,$F9754A3003804B00
  end;
  rewrite(output,'OUTPUT.TXT');
  write(s)
end.
Yandex
Объявления
20.08.2013, 18:39     Выведите в выходной файл округленное до n знаков после десятичной точки число E
Ответ Создать тему
Опции темы

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