说真的,我的代码有什么问题

时间:2015-05-17 07:05:23

标签: c

我正在尝试从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;
}

2 个答案:

答案 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 =看起来它会起作用,但这不是所要求的。

此外,您正在读取无符号整数,并且会立即失败任何带有签名数字的测试用例。