Chương trình C++ bị Time limit exceeded
[code]#include <bits/stdc++.h>
using namespace std;
int arithmetic(int num1, int num2, char op)
{
if(op == ‘+’)
{
return num1 + num2;
}
else if(op == ‘-’)
{
return num1 - num2;
}
else if(op == ‘x’)
{
return num1*(num2);
}
else if(op == ‘/’)
{
return num1/num2;
}
else if(op==’%’)
{
return num1%num2;
}
}
double mathFunc(double num, string op)
{
if(op.compare(“sin”)==0)
{
return sin(num);
}
else if(op.compare(“cos”)==0)
{
return cos(num);
}
else if(op.compare(“sqrt”)==0)
{
return sqrt(num);
}
}
string getError(double num, string op)
{
if((op.compare(“sqrt”)==0 && num >=0) || op.compare(“cos”)==0 ||op.compare(“sin”)==0 )
{
return “”;
}
else
{
return “Invalid function”;
}
}
string getError(int num1, int num2, char op)
{
if(’/’ == op || ‘%’ == op)
{
if(num2==0)
{
return “Divided by zero”;
}
else
{
return “”;
}
}
else if(‘x’ ==op ||’+’==op||’-’==op )
{
return “”;
}
else
{
return “Invalid operator”;
}
}
void calculate(int argc, char* argv[])
{
if(argc==3)
{
double num = atoi(argv[2]);
string getEr = getError(num,argv[1]);
if(getEr.compare("")==0)
{
double result = mathFunc(num, argv[1]);
cout << fixed << setprecision(2) << result << endl;
}
else
{
cout << getEr << endl;
}
}
else if(argc == 4)
{
int num1 = atoi(argv[1]);
int num2 = atoi (argv[3]);
string getEr = getError(num1,num2,argv[2][0]);
if(getEr.compare("")==0)
{
int result = arithmetic(num1,num2,argv[2][0]);
cout << result << endl;
}
else
{
cout << getEr << endl;
}
}
}
int main() {
int argc;
cin >> argc;
char* argv[argc];
for(int i = 1; i < argc; i++) {
argv[i] = new char[20];
cin >> argv[i];
}
calculate(argc, argv);
}[/code]
tại sao vậy mọi người
mình chạy trên dev c thì ok mà chứ submit lên trang nhà trường thì lại lỗi.
Post đề lên bạn ơi
đề là viết chương trình simple caculator,
part 1: Viết hàm int arithmetic(int num1, int num2, char op) tính toán các phép toán +, -, x, / của 2 số nguyên num1, num2. Phép toán được đặt trong ký tự op.
part 2: Viết hàm double mathFunc(double num, string op) tính toán các hàm sin(x), cos(x), sqrt(x) của số thực num. Phép toán được đặt trong xâu ký tự op
part3: Viết hàm void calculate(int argc, char* argv[]) xét các trường hợp cho số lượng tham số dòng lệnh argc.
Nếu argc = 3 thì tham số argv[1] sẽ là tên hàm sin, cos, sqrt, còn tham số argv[2] sẽ là số thực num, sử dụng hàm double mathFunc(double num, string op) để tính toán rồi in ra kết quả.
Nếu argc = 4 thì tham số argv[1] và argv[3] sẽ là các số nguyên num1, num2, còn tham số argv[2] sẽ là toán tử +, -, x, /, sử dụng hàm int arithmetic(int num1, int num2, char op) để tính toán rồi in ra kết quả.
part 4: Viết hàm string getError(double num, string op) kiểm tra các đối số có phù hợp để sử dụng hàm double mathFunc(double num, string op) (được định nghĩa ở bài tập Calculator 2). Nếu phù hợp, trả về xâu rỗng, ngược lại trả về xâu thông báo lỗi “Invalid function”.
part5: Viết hàm string getError(int num1, int num2, char op) kiểm tra các đối số có phù hợp để sử dụng hàm int arithmetic(int num1, int num2, char op). Nếu phù hợp, trả về xâu rỗng, ngược lại trả về xâu thông báo lỗi như sau:
“Invalid operator” nếu phép toán op không được hỗ trợ (Chỉ hỗ trợ các phép cộng +, trừ -, nhân x, chia /)
“Divided by zero” nếu là phép toán chia cho số 0
part6: Viết lại hàm void calculate(int argc, char* argv[]) xét các trường hợp cho số lượng tham số dòng lệnh argc.
Nếu argc == 3 thì tham số argv[1] sẽ là tên hàm sin, cos, sqrt, còn tham số argv[2] sẽ là số thực num, sử dụng hàm double mathFunc(double num, string op) để tính toán rồi in ra kết quả.
Nếu argc == 4 thì tham số argv[1] và argv[3] sẽ là các số nguyên num1, num2, còn tham số argv[2] sẽ là toán tử +, -, x, /, sử dụng hàm int arithmetic(int num1, int num2, char op) để tính toán rồi in ra kết quả.
part 7 : rong bài này, bạn cần thêm tính năng tính phần dư cho hàm int arithmetic(int num1, int num2, char op). Khi thêm một tính năng mới, bạn cần suy nghĩ xem cần phải sửa thêm những chỗ nào trong chương trình để đạt được kết quả mong muốn.
Gợi ý: Bạn cần phải sửa cả hàm string getError(int num1, int num2, char op) do hàm này cần kiểm tra lỗi chia cho không khi gặp phép toán lấy phần dư.
temp: [code]#include <bits/stdc++.h>
using namespace std;
int arithmetic(int num1, int num2, char op) {
// YOUR CODE HERE
return 0
}
double mathFunc(double num, string op) {
// YOUR CODE HERE
return 0.0;
}
string getError(double num, string op) {
// YOUR CODE HERE
return “”;
}
string getError(int num1, int num2, char op) {
// YOUR CODE HERE
return “”;
}
void calculate(int argc, char* argv[]) {
// YOUR CODE HERE
}
int main(int argc, char* argv[]) {
calculate(argc, argv);
return 0;
}[/code]
Dùng thống nhất 1 kiểu xâu trong C++ đi bạn. Đã std::string thì std::string hết, đã char* thì char* hết. Mà đã dùng C++ thì dùng std::string luôn đi.
Mấy hàm atoi đổi hết sang stoi rồi submit code với C++11 đi.