我正在尝试从spoj http://www.spoj.com/problems/ARITH2/
解决一个问题但每次我得到' WA'错误的答案。我已经尝试了所有可能的测试用例并且它给了我预期的结果。我已经编写了下面提到的代码:
#include <stdio.h>
int main() {
int t,s=0;char operator;
scanf("%d",&t);
while(t--)
{
signed long long int s=0,c=0;
scanf("%lld",&s);
while(1)
{
operator=0;
operator=getc(stdin);
if(operator=='=')
break;
scanf("%lld",&c);
switch(operator)
{
case '+' : s=s+c;
break;
case '-' : s=s-c;
break;
case '*' : s=s*c;
break;
case '/' : s=s/c;
break;
}
}
printf("%lld\n",s);
}
return 0;
}
答案 0 :(得分:1)
请检查要求,不应使用 String tab[] = str.split("\"[\",\\[\\]]+");
for (int i = 0; i < tab.length; i++) {
if (!tab[i].isEmpty() && !tab[i].equals("[]") ) {
// tab[i] = tab[i].replace("[]"," ");
tab[i] = tab[i].replace("\\/","/");
tab[i] = tab[i].replace("[\"","");
tab[i] = tab[i].replace("\"]","");
MyString myString = new MyString();
myString.setMyString(tab[i]);
list.add(myString);
}
}
,而是使用scanf
cos输入是整个表达式sscanf
。您可以创建一个简单的解析器,如下面的代码,以演示整个表达式。
50 * 40 * 250 + 791 =
答案 1 :(得分:0)
快速浏览一下,看起来你并不尊重规范中列出的间距。例如,1 + 1 * 2 =将为操作员读取错误的字符。 1 + 1 * 2 =看起来它会起作用,但这不是所要求的。
此外,您正在读取无符号整数,并且会立即失败任何带有签名数字的测试用例。