Блог пользователя Misha100896

Автор Misha100896, 10 лет назад, По-русски

Добрый день, уважаемое сообщество codeforces. Буквально пару недель назад я начал изучать с++, т.к. в этом году закончил школу. До этого я знал исключительно pascal и на всех олимпиадах кодил только на нем.
Но при решении этой задачи я столкнулся с одной проблемой. Код на pascal получает Accepted, а на c++ Wrong Answer.
Код на pascal: тут
Код на с++: тут
И теперь я прошу тех, кто знает в чем причина Wrong Answer, рассказать её и как бороться с этой проблемой. Буду очень признателен!

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
10 лет назад, # |
  Проголосовать: нравится +19 Проголосовать: не нравится
#include <iostream>

int main() {
        double test = 1.23456789;
        std::cout << test << std::endl;
        return 0;
}
  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Спасибо, понял. А как тогда сделать, чтобы вывод был с более большей точностью?

    • »
      »
      »
      10 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится
      cout.precision(x);
      cout<<fixed<<a<<" "<<b;
      

      Где x -- количество знаков после запятой, а a и b то, что мы выводим.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      printf("%.Xlf", ans); X — число знаков после запятой

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится -39 Проголосовать: не нравится

        При выводе %f по стандарту достаточно. Мне уже надоело это повторять.

        • »
          »
          »
          »
          »
          10 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Почему ты так рейджишь? %lf не работает, что ли?

          • »
            »
            »
            »
            »
            »
            10 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            Просто люди, наученные подобными советами (и не читавшие книги по C/C++), потом пытаются доказывать, что выводить double через %f — неправильно.

            • »
              »
              »
              »
              »
              »
              »
              10 лет назад, # ^ |
              Rev. 3   Проголосовать: нравится +23 Проголосовать: не нравится

              Конечно, неправильно писать %f для double.
              Потому что те, кого научишь, что это правильно, начинают писать и так

              double a;
              scanf("%f",&a);

              А это уже просто совсем неправильно.

              В printf (и др.) происходит неявное преобразование float-double, но это просто для совместимости с очень старым С.
              UPD. Не в самой printf, естественно, а при передаче параметров в printf. Ну а сама printf уже воспринимает %f и %lf одинаково.

              • »
                »
                »
                »
                »
                »
                »
                »
                10 лет назад, # ^ |
                  Проголосовать: нравится 0 Проголосовать: не нравится

                Конечно, неправильно писать %f для double. Потому что те, кого научишь, что это правильно, начинают писать и так

                double a;
                scanf("%f",&a);

                А это уже просто совсем неправильно.

                В printf (и др.) происходит неявное преобразование float-double, но это просто для совместимости с очень старым С. UPD. Не в самой printf, естественно, а при передаче параметров в printf. Ну а сама printf уже воспринимает %f и %lf одинаково.

                Не знаю, меня книга Кернигана и Ритчи научила писать %f для вывода double и %lf — для ввода. Про преобразования аргументов vararg-функций я прочитал там же.

                Ретируюсь из дискуссии.

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

Написал бред