• cdoj 秋实大哥搞算数


    地址:http://acm.uestc.edu.cn/#/contest/show/95

    题目:

    N - 秋实大哥搞算数

    Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

    秋实大哥大学物理挂科了(误),于是在下学期的前两周的某一天要悲剧的补考。为了不给学校的挖掘机大楼做贡献,秋实大哥决定在假期里努力复习。当然,良好的计算能力也是非常必要的,毕竟是涉及计算自己做多少分的题能够通过考试的问题。现在他给自己出了一大堆长长的只有涉及整形四则运算式子,然后埋头计算结果。为了检验自己的计算能力,他请你来帮忙。

    Input

    第一行一个整数T,表示式子的总数。

    接下来每一行有一个长度不超过10^6的表达式,只包含正整数和四则运算符号('+', '-', '*', '/')。

    保证输入合法。

    Output

    对于每一个表达式,输出相应的结果,占一行。

    保证运算及结果在long long范围以内。

    Sample input and output

    Sample InputSample Output
    2
    12+5/4-1
    4*5/3
    12
    6

    思路:

    ,,wa次数最多的题目,,一开始没判 (第一见要判这个的,涨姿势了),,,wa无数次

    然后智商不够,用栈搞不出来,又只能自己想了。。。。。。

             我的做法是对答案有影响的就三个操作符,当前读取的操作符,和前两个,然后对所有情况分类讨论,,,这样就可以在读取的时候做的一边读取一边计算了。。。

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstdio>
     4 #include <cmath>
     5 #include <cstring>
     6 #include <queue>
     7 #include <stack>
     8 #include <map>
     9 #include <vector>
    10 #include <cstdlib>
    11 #include <string>
    12 
    13 #define PI acos((double)-1)
    14 #define E exp(double(1))
    15 using namespace std;
    16 
    17 int main (void)
    18 {
    19     int t;
    20     cin>>t;
    21     getchar();
    22     while(t--)
    23     {
    24         long long num[5],ans=0;
    25         char op[5],c;
    26         scanf("%lld",&num[1]);
    27         if(scanf("%c",&c)==EOF||c=='
    ')
    28         {
    29             printf("%lld
    ",num[1]);continue;
    30         }
    31         op[2]=c;//3为当前操作数
    32         scanf("%lld",&num[2]);
    33         while(scanf("%c",&op[3])!=EOF && op[3]!='
    ')
    34         {
    35             scanf("%lld",&num[3]);
    36             if(op[3]=='*'||op[3]=='/')
    37             {
    38                 if(op[2]=='+'||op[2]=='-')
    39                 {
    40                     if(op[3]=='*')num[2]*=num[3];
    41                     else num[2]/=num[3];
    42 
    43                 }
    44                 else
    45                 {
    46                     if(op[2]=='*') num[1]*=num[2];
    47                     else num[1]/=num[2];
    48                     num[2]=num[3];
    49                     op[2]=op[3];
    50                 }
    51 
    52             }
    53             else
    54             {
    55                 if(op[2]=='+'||op[2]=='-')
    56                 {
    57                     if(op[2]=='+') num[1]+=num[2];
    58                     else num[1]-=num[2];
    59                     num[2]=num[3];
    60                     op[2]=op[3];
    61                 }
    62                 else
    63                 {
    64                      if(op[2]=='*') num[1]*=num[2];
    65                      else   num[1]/=num[2];
    66                      num[2]=num[3];
    67                      op[2]=op[3];
    68                 }
    69             }
    70         }
    71         if(op[2]=='*')  ans=num[1]*num[2];
    72             else if(op[2]=='/') ans=num[1]/num[2];
    73             else if(op[2]=='+') ans=num[1]+num[2];
    74             else    ans=num[1]-num[2];
    75         printf("%lld
    ",ans);
    76     }
    77 
    78     return 0;
    79 }
    View Code
  • 相关阅读:
    ZYNQ. Interrupt(1)Private Timer
    RaspberryPi.1.开机与远程桌面
    ZYNQ. DMA基本用法
    ZYNQ. LwIP.PHY.KSZ9031RNX
    Verilog笔记.三段式状态机
    c语言.函数指针数组
    c语言学习笔记.链表.
    D3D基本框架:即D3D头文件分类
    win32窗口:关于鼠标定位位置偏移问题的原因及解决方法
    <转>C++基础知识: 引用
  • 原文地址:https://www.cnblogs.com/weeping/p/5456145.html
Copyright © 2020-2023  润新知