Переход с Pascal на С++
Решил изучать С++, почитал книжек и т.д. Решил сдать задачу на одном сайте. Написал код:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .pascal.geshi_code {font-family:monospace;} .pascal.geshi_code .imp {font-weight: bold; color: red;} .pascal.geshi_code .kw1 {color: #000000; font-weight: bold;} .pascal.geshi_code .kw2 {color: #000000; font-weight: bold;} .pascal.geshi_code .kw3 {color: #000066;} .pascal.geshi_code .kw4 {color: #000066; font-weight: bold;} .pascal.geshi_code .co1 {color: #666666; font-style: italic;} .pascal.geshi_code .coMULTI {color: #666666; font-style: italic;} .pascal.geshi_code .es0 {color: #000099; font-weight: bold;} .pascal.geshi_code .es_h {color: #000099; font-weight: bold;} .pascal.geshi_code .br0 {color: #009900;} .pascal.geshi_code .sy0 {color: #339933;} .pascal.geshi_code .st0 {color: #ff0000;} .pascal.geshi_code .st_h {color: #ff0000;} .pascal.geshi_code .nu0 {color: #cc66cc;} .pascal.geshi_code .me1 {color: #0066ee;} .pascal.geshi_code span.xtra { display:block; }
Program my;
var a,b,c,n : longint;
Begin
readln(n);
a:=(13*n) div 24;
b:=n div 6;
c:=(7*n) div 24;
writeln(a,' ',b,' ',c);
End.
Переписал на С++
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .cpp.geshi_code {font-family:monospace;} .cpp.geshi_code .imp {font-weight: bold; color: red;} .cpp.geshi_code .kw1 {color: #0000ff;} .cpp.geshi_code .kw2 {color: #0000ff;} .cpp.geshi_code .kw3 {color: #0000dd;} .cpp.geshi_code .kw4 {color: #0000ff;} .cpp.geshi_code .co1 {color: #666666;} .cpp.geshi_code .co2 {color: #339900;} .cpp.geshi_code .coMULTI {color: #ff0000; font-style: italic;} .cpp.geshi_code .es0 {color: #000099; font-weight: bold;} .cpp.geshi_code .es1 {color: #000099; font-weight: bold;} .cpp.geshi_code .es2 {color: #660099; font-weight: bold;} .cpp.geshi_code .es3 {color: #660099; font-weight: bold;} .cpp.geshi_code .es4 {color: #660099; font-weight: bold;} .cpp.geshi_code .es5 {color: #006699; font-weight: bold;} .cpp.geshi_code .br0 {color: #008000;} .cpp.geshi_code .sy0 {color: #008000;} .cpp.geshi_code .sy1 {color: #000080;} .cpp.geshi_code .sy2 {color: #000040;} .cpp.geshi_code .sy3 {color: #000040;} .cpp.geshi_code .sy4 {color: #008080;} .cpp.geshi_code .st0 {color: #FF0000;} .cpp.geshi_code .nu0 {color: #0000dd;} .cpp.geshi_code .nu6 {color: #208080;} .cpp.geshi_code .nu8 {color: #208080;} .cpp.geshi_code .nu12 {color: #208080;} .cpp.geshi_code .nu16 {color:#800080;} .cpp.geshi_code .nu17 {color:#800080;} .cpp.geshi_code .nu18 {color:#800080;} .cpp.geshi_code .nu19 {color:#800080;} .cpp.geshi_code .me1 {color: #007788;} .cpp.geshi_code .me2 {color: #007788;} .cpp.geshi_code span.xtra { display:block; }
#include "iostream.h"
using namespace std;
int main() {
int a, b, c, n;
cin >> n;
a = (13*n) / 24;
b = n / 6;
c = (7*n) / 24;
cout << a << ' ' << b << ' ' << c;
return 0;
}
Код на Pascal отлично скомпилировался и прошел все тесты. Код на С++ отлично скомпилировался, но дал неправильные ответы на все тесты. Собственно, что я упустил? Что не так в коде на С++?
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .pascal.geshi_code {font-family:monospace;} .pascal.geshi_code .imp {font-weight: bold; color: red;} .pascal.geshi_code .kw1 {color: #000000; font-weight: bold;} .pascal.geshi_code .kw2 {color: #000000; font-weight: bold;} .pascal.geshi_code .kw3 {color: #000066;} .pascal.geshi_code .kw4 {color: #000066; font-weight: bold;} .pascal.geshi_code .co1 {color: #666666; font-style: italic;} .pascal.geshi_code .coMULTI {color: #666666; font-style: italic;} .pascal.geshi_code .es0 {color: #000099; font-weight: bold;} .pascal.geshi_code .es_h {color: #000099; font-weight: bold;} .pascal.geshi_code .br0 {color: #009900;} .pascal.geshi_code .sy0 {color: #339933;} .pascal.geshi_code .st0 {color: #ff0000;} .pascal.geshi_code .st_h {color: #ff0000;} .pascal.geshi_code .nu0 {color: #cc66cc;} .pascal.geshi_code .me1 {color: #0066ee;} .pascal.geshi_code span.xtra { display:block; }
Program my;
var a,b,c,n : longint;
Begin
readln(n);
a:=(13*n) div 24;
b:=n div 6;
c:=(7*n) div 24;
writeln(a,' ',b,' ',c);
End.
Переписал на С++
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .cpp.geshi_code {font-family:monospace;} .cpp.geshi_code .imp {font-weight: bold; color: red;} .cpp.geshi_code .kw1 {color: #0000ff;} .cpp.geshi_code .kw2 {color: #0000ff;} .cpp.geshi_code .kw3 {color: #0000dd;} .cpp.geshi_code .kw4 {color: #0000ff;} .cpp.geshi_code .co1 {color: #666666;} .cpp.geshi_code .co2 {color: #339900;} .cpp.geshi_code .coMULTI {color: #ff0000; font-style: italic;} .cpp.geshi_code .es0 {color: #000099; font-weight: bold;} .cpp.geshi_code .es1 {color: #000099; font-weight: bold;} .cpp.geshi_code .es2 {color: #660099; font-weight: bold;} .cpp.geshi_code .es3 {color: #660099; font-weight: bold;} .cpp.geshi_code .es4 {color: #660099; font-weight: bold;} .cpp.geshi_code .es5 {color: #006699; font-weight: bold;} .cpp.geshi_code .br0 {color: #008000;} .cpp.geshi_code .sy0 {color: #008000;} .cpp.geshi_code .sy1 {color: #000080;} .cpp.geshi_code .sy2 {color: #000040;} .cpp.geshi_code .sy3 {color: #000040;} .cpp.geshi_code .sy4 {color: #008080;} .cpp.geshi_code .st0 {color: #FF0000;} .cpp.geshi_code .nu0 {color: #0000dd;} .cpp.geshi_code .nu6 {color: #208080;} .cpp.geshi_code .nu8 {color: #208080;} .cpp.geshi_code .nu12 {color: #208080;} .cpp.geshi_code .nu16 {color:#800080;} .cpp.geshi_code .nu17 {color:#800080;} .cpp.geshi_code .nu18 {color:#800080;} .cpp.geshi_code .nu19 {color:#800080;} .cpp.geshi_code .me1 {color: #007788;} .cpp.geshi_code .me2 {color: #007788;} .cpp.geshi_code span.xtra { display:block; }
#include "iostream.h"
using namespace std;
int main() {
int a, b, c, n;
cin >> n;
a = (13*n) / 24;
b = n / 6;
c = (7*n) / 24;
cout << a << ' ' << b << ' ' << c;
return 0;
}
Код на Pascal отлично скомпилировался и прошел все тесты. Код на С++ отлично скомпилировался, но дал неправильные ответы на все тесты. Собственно, что я упустил? Что не так в коде на С++?
1 ответов
У меня ваш код на C++ дал верные ответы на N = 120
Может проблема с компилятором?
Ради интереса переписал на чистый Си - все ок
#include <stdio.h>
int main() {
int a, b, c, n;
scanf("%d", &n);
a = (13*n) / 24;
b = n / 6;
c = (7*n) / 24;
printf("%d %d %d", a, b, c);
return 0;
}
UPD
@khanyukov ты не поверишь! Я ради инетереса зарегистрировался там, начал проверять решение.. В общем, ошибка в том, что в конце вывода надо было поставить перевод строки (*facepalm*):
printf("%d %d %d\n", a, b, c);
// или
cout << a << ' ' << b << ' ' << c '\n';
// или так
cout << a << ' ' << b << ' ' << c<<endl;
UPD++
Мой код на первом месте по производительности (*внезапная удача*) :)
в паскале все переменные longint, в C++ они же int, там наверное переполнение происходит, используй также longint