注册 登录
编程论坛 C语言论坛

不知道这算个什么题,但是大佬们可以进来帮忙解答一下

零号小白菜 发布于 2019-12-18 17:35, 1562 次点击
输入两行,每行输入一条只包含加减法的式子,数字与运算符间可能存在若干空格,数字内部不会存在空格,行首行末不存在多余空格,每个数字为非负32位有符号整形范围。
每行的总字符数不超过5e6。
求这两行式子的结果。计算过程和结果保证在32位整形范围内。



输入格式 输入两行,每行输入一条只包含加减法的式子,数字与运算符间可能存在若干空格,数字内部不会存在空格,行首行末不存在多余空格,每个数字在32位有符号的正整形范围。
每行的总字符数不超过5e6。

输出格式 输出两行,每行包含一个数,每行结果。

输入样例 1 + 2
8 - 1

输出样例 3
7
5 回复
#2
rjsp2019-12-19 09:32
这题有什么奥秘,你倒是说出来呀。我眼拙,啥也没看出来
#3
rjsp2019-12-19 09:54
#include <stdio.h>

void foo( void )
{
    long long result = 0;

    for( int sign=+1,num=0; ; )
    {
        int ch = getchar();
        if( ch>='0' && ch<='9' )
            num = num*10 + (ch-'0');
        else
        {
            result += sign*num;
            num = 0;
            if( ch == '+' )
                sign = +1;
            else if( ch == '-' )
                sign = -1;
            else if( ch==EOF || ch=='\n' )
                break;
        }
    }
    printf( "%lld\n", result );
}

int main( void )
{
    foo();
    foo();
}
#4
零号小白菜2019-12-22 22:02
做出来了
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int a,sum,k,i;
    char ch;
    for(i=0;i<2;i++)
    {
       sum=0;
       scanf("%d",&a);
       k=a;
       ch=getchar();
       do{
        while(ch==' ')
        {
            ch=getchar();
        }
        scanf("%d",&a);
        switch(ch)
        {
            case '-':sum=sum+k-a;break;
            case '+':sum=sum+k+a;break;
        }
        k=0;
        ch=getchar();
       }while(ch!='\n');
      printf("%d",sum);
      printf("\n");
    }
    return 0;
}
#5
零号小白菜2019-12-22 22:05
回复 2楼 rjsp
没什么奥妙吧,就学校里的新生赛题,一开始想不到,来问问大佬
#6
零号小白菜2019-12-22 22:07
抱歉抱歉,下次一定把问题说明白
1