Это код для обратной полярности. Когда я запускаю его в unix, он отлично работает, но кодек говорит неправильный ответ. Пожалуйста помоги.Codechef: обратная польская обозначение
#include<stdio.h>
#include<string.h>
void push(char);
void pop();
char stack[400];
unsigned long top=0;
int main()
{
unsigned long len, test_case,i=0,j=0;
char expr[400];
scanf("%u\n",&test_case);
for(;j<test_case;j++)
{
scanf("%s\n",expr);
len=strlen(expr);
for(;i<len;i++)
{
if(expr[i]=='+'||expr[i]=='-'||expr[i]=='*'||expr[i]=='/'||expr[i]=='^')
push(expr[i]);
else if(expr[i]==')')
{
pop();
}
else if(expr[i]=='(')
continue;
else
printf("%c",expr[i]);
}
}
return 0;
}
void pop()
{
if(top==-1)
return;
else
{
printf("%c",stack[top]);
top=top-1;
}
}
void push(char x)
{
if(top==400)
return;
else
{
stack[++top]=x;
}
}
Я не уверен, что это проблема, но не должна ли переменная i быть сброшена до нуля во время каждой итерации j? – 2013-04-24 15:27:03
1. Можете ли вы придумать * любой * вход RPN, который бы * не * работал с этим? 2. Учет ** всех ** возможностей из # 1. 3. Прошли ли вы через * несколько образцов RPN с этим? 3. При размещении вопросов о CodeChef или других подобных веб-сайтах для программирования, * ссылку на конкретный вопрос сайта. * – WhozCraig
'char expr [400];' Я думаю, 400 - это максимальная длина ввода. Вам нужно место для 0-терминатора. –