Добрый день, уважаемое сообщество codeforces. Буквально пару недель назад я начал изучать с++, т.к. в этом году закончил школу. До этого я знал исключительно pascal и на всех олимпиадах кодил только на нем.
Но при решении этой задачи я столкнулся с одной проблемой. Код на pascal получает Accepted, а на c++ Wrong Answer.
Код на pascal: тут
Код на с++: тут
И теперь я прошу тех, кто знает в чем причина Wrong Answer, рассказать её и как бороться с этой проблемой. Буду очень признателен!
Спасибо, понял. А как тогда сделать, чтобы вывод был с более большей точностью?
Где x -- количество знаков после запятой, а a и b то, что мы выводим.
printf("%.Xlf", ans); X — число знаков после запятой
При выводе
%f
по стандарту достаточно. Мне уже надоело это повторять.Почему ты так рейджишь?
%lf
не работает, что ли?Просто люди, наученные подобными советами (и не читавшие книги по C/C++), потом пытаются доказывать, что выводить
double
через%f
— неправильно.Конечно, неправильно писать %f для double.
Потому что те, кого научишь, что это правильно, начинают писать и так
double a;
scanf("%f",&a);
А это уже просто совсем неправильно.
В printf (и др.) происходит неявное преобразование float-double, но это просто для совместимости с очень старым С.
UPD. Не в самой printf, естественно, а при передаче параметров в printf. Ну а сама printf уже воспринимает %f и %lf одинаково.
Не знаю, меня книга Кернигана и Ритчи научила писать
%f
для выводаdouble
и%lf
— для ввода. Про преобразования аргументов vararg-функций я прочитал там же.Ретируюсь из дискуссии.
Написал бред